2016-09-17 39 views
0

我有一個ListTuples的:意外行爲 - 只接受匿名函數

golden = [{%{"age" => 80, "name" => "Dorothy"}, 
      %{"age" => 50, "name" => "Rose"}}, 
      {%{"age" => 90, "name" => "Sophia"}, 
      %{"age" => 60, "name" => "Blanche"}}] 

方法#1

我用Enum.map如下,但得到一個錯誤:

Enum.map(golden, Tuple.to_list) 

** (UndefinedFunctionError) undefined function Tuple.to_list/0 
(elixir) Tuple.to_list() 

方法#2

當我定義一個匿名函數:

f = fn(data) -> Tuple.to_list(data) end 

並使用Enum.map有了它,我得到期望的結果:

Enum.map(golden, f) 

[[%{"age" => 80, "name" => "Dorothy"}, %{"age" => 50, "name" => "Rose"}], 
[%{"age" => 90, "name" => "Sophia"}, %{"age" => 60, "name" => "Blanche"}]] 

也許我失去了一些東西,但不是這些2接近完全相同的東西?

回答

2

你缺少& operatorCapture operator

Captures or creates an anonymous function.

iex()> Enum.map(golden, &Tuple.to_list/1) 
[[%{"age" => 80, "name" => "Dorothy"}, %{"age" => 50, "name" => "Rose"}], 
[%{"age" => 90, "name" => "Sophia"}, %{"age" => 60, "name" => "Blanche"}]]