2017-03-05 19 views

回答

1

Agent.update/3執行代理的state並返回新的state的功能。

所以,如果我需要一些Agent

iex(1)> {:ok, pid} = Agent.start(fn -> 4 end) 
{:ok, #PID<0.90.0>} 
iex(2)> pid 
#PID<0.90.0> 
iex(3)> Agent.update(pid, &(&1 + 2)) 
:ok 
iex(4)> Agent.get(pid, &(&1)) 

現在,當你在質疑的語法。

iex(1)> [1, 2, 3] 
[1, 2, 3] 
iex(2)> [1 | [2 | [3]]] 
[1, 2, 3] 

本質上它是一種將值預先加到當前列表的方法。

iex(3)> [1, 2 | 3] 
[1, 2 | 3] 

使用|當創建一個列表,您將需要小心。你會希望確定你已經有一個列表,因爲你可以創建一個不正確的列表,如果你不期望的話可能會意外地導致一些問題。

1

捕獲運算符是一個語法糖/速記,用於聲明最小體積1的匿名函數。Kernel.SpecialForms.&只需要它的參數,查找其中的所有&N並將整個轉換爲匿名函數。最有代表性的例子是:

iex(1)> f = &(&1) 
#Function<6.50752066/1 in :erl_eval.expr/5> 
iex(2)> f.(42) 
42 

Elixir以一種自由的方式處理空間(不像Python :)。如果沒有歧義,空格將被忽略。有人可能會寫f = &(&1)f = & &1f =& &1,以上所有都是等效的。如果沒有歧義,可能會被忽略的空間:

iex(3)> sum_it = &[&1 | 42] 
#Function<6.50752066/1 in :erl_eval.expr/5> 
iex(4)> sum_it.(3.14) 
[3.14 | 42] 

以上是基本相同sum_it = &([&1 | 42])。也就是說,以上是一個語法糖:

iex(5)> sum_it = fn arg1 -> [arg1 | 42] end 

希望澄清事情。

相關問題