2016-07-06 103 views
1

我傳遞一個函數來Enum.reduce如下得到24我可以在Elixir中嵌套匿名函數嗎?

Enum.reduce([1,2,3,4], &(&1 * &2)) #=> 24 

如果我有一個嵌套的列表中,我想乘每個嵌套元素和它們一起求和。例如,在[[1,2],[3,4]]我想執行[[1*2] + [3*4]]得到14,有沒有一種方法(使用匿名函數)

這是我試過(知道它的不正確的),我得到nested captures via & are not allowed做到這一點。我試圖用藥劑

Enum.reduce([[1,2],[3,4]], &(&(&1 * &2) + &(&1 * &2))) 
+2

最好不要使用'&'操作符來創建過於複雜的匿名函數,因爲您最終難以調試,理解代碼。 – coderVishal

回答

4

你是完全正確時,瞭解所需的心智模式,如果你願意嘗試拼圖匿名函數與捕獲你會得到(CompileError): nested captures via & are not allowed

此外,捕獲是爲了簡單。不要過度複雜化。

這就是你如何能做到這一點:

[[1,2],[3,4]] 
|> Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end)) 
|> Enum.sum 

我們在這裏做的主要是兩件事情:

  1. Enum.map(&Enum.reduce(&1, fn(x, acc) -> x * acc end)) 對於每個子列表([1, 2][3, 4])我們運行一個拍攝功能&Enum.reduce,其中&1是子列表。然後我們計算乘法:fn(x, acc) -> x * acc end
  2. 我們sum結果列表。
+0

嗨,請您簡單介紹一下您的解決方案以澄清我的理解。謝謝。 – Bala

+1

完成!現在應該清楚了。 – sobolevn

相關問題