Elixir 使用长生不老药';带多体匿名函数的s速记符号
给定Elixir函数Elixir 使用长生不老药';带多体匿名函数的s速记符号,elixir,Elixir,给定Elixir函数add1=fn a->a+1 end,我知道可以用速记法将其表示为add1=&(&1+1) 有没有一种方法可以在多体函数中使用速记符号?例如,下面的函数返回两个数字中较大的一个 max = fn a, b when a > b -> a _a, b -> b end 有没有可能用Elixir的速记法来表达这个匿名函数?这个例子很有效 max = fn (a, b) when a >= b -> a (_a, b) -&g
add1=fn a->a+1 end
,我知道可以用速记法将其表示为add1=&(&1+1)
有没有一种方法可以在多体函数中使用速记符号?例如,下面的函数返回两个数字中较大的一个
max = fn
a, b when a > b -> a
_a, b -> b
end
有没有可能用Elixir的速记法来表达这个匿名函数?这个例子很有效
max = fn
(a, b) when a >= b -> a
(_a, b) -> b
end
IO.puts max.(0, 2) # 2
IO.puts max.(2, -5) # 2
我不认为这是一种速记形式。
一般解决方案是将所有参数放在案例中
:
max = &
case {&1, &2} do
{a, b} when a > b -> a
{a, b} -> b
end
但是这只会让它变长。这个“速记符号”是怎么回事?我看到你修正了警告,我会调整上面的例子。这是速记,但不是多体。这甚至可以简化为
&if(&1>&2,do:&1,else:&2)
。或者甚至&1>&2&&1|&2
。当两个值都是错误的但不同时,会给出错误的答案:max=&1>&2&&1|&2;max.(false,nil)==max.(nil,false)#=>false
。从目前的答案来看,上面的函数似乎有使用条件或逻辑运算符的速记符号,但没有速记形式将其表示为多体函数。@Kabie我也在成都,你能给我留电子邮件吗?
max = &
case {&1, &2} do
{a, b} when a > b -> a
{a, b} -> b
end