如何将匿名函数传递给Elixir中的管道

rui*_*sin 40 elixir

我想写这样的代码:

def boundary do
  :crypto.rand_bytes(8)
  |> Base.encode16
  |> &("--------FormDataBoundary" <> &1)
end
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

cou*_*mar 65

它看起来有点奇怪,但必须工作:

def boundary do
  :crypto.rand_bytes(8)
  |> Base.encode16
  |> (&("--------FormDataBoundary" <> &1)).()
end
Run Code Online (Sandbox Code Playgroud)

  • 有什么理由让它如此奇怪吗?当我将一个函数传递给一个管道时,我更像是一个变量(是的,我来自Javascript),但是做(fn).()看起来就像我立即调用它而我不是. (3认同)

Nat*_*ong 11

相关:如果已将"匿名"函数分配给变量,则可以像这样管道:

def boundary do
  add_marker = fn (s) ->
    "--------FormDataBoundary" <> s
  end

  :crypto.rand_bytes(8)
  |> Base.encode16
  |> add_marker.()
end
Run Code Online (Sandbox Code Playgroud)