使用Elixir的简写符号和多体匿名函数

时间:2016-10-28 02:45:49

标签: elixir

鉴于Elixir函数add1 = fn a -> a + 1 end,我知道可以用速记符号表示add1 = &(&1 + 1)

有没有办法在多体功能中使用速记符号?例如,以下函数返回两个数字中的较大者。

max = fn
  a, b when a > b -> a
  _a, b -> b
end

是否可以使用Elixir的速记符号来表达此匿名函数?

2 个答案:

答案 0 :(得分:1)

max = &
  case &1 > &2 do
    true -> &1
    false -> &2
  end

我不认为这是一种简写形式。

通用解决方案将所有参数放在case

max = &
  case {&1, &2} do
    {a, b} when a > b -> a
    {a, b} -> b
  end

但这只会让它更长。

答案 1 :(得分:0)

此示例有效

max = fn
    (a, b) when a >= b -> a
    (_a, b) -> b
end

IO.puts max.(0, 2) # 2
IO.puts max.(2, -5) # 2