2016-08-13 19 views
2

通過Dave(PragProg)Elixir書籍工作。挑戰是將一對元組轉換爲列表。使用速記符號匿名函數將元組轉換爲列表

這工作

pair = fn {a,b} -> [a,b] end 
pair.({1,2}) #=> [1,2] 

現在我試着用速記符號(我覺得缺了點什麼,但不知道它是什麼......對於如我怎麼說,我期待/發送一個元組)

如何使用簡寫符號獲得相同的結果?

pair = &([&1,&2]) 
pair.({1,2}) #=> BadArityError 

試過這種

pair = &{[&1,&2]} # but didn't work. I am missing something important 

回答

2

它不工作,因爲{a, b}是一個參數,所以它得到&1過去了,沒有&2

一種方式做到這一點,我能想到的是使用Tuple.to_list/1功能,所以它會是這樣:

pair = &Tuple.to_list/1 
pair.({1,2}) #=> [1,2] 

但如果這是不是你想要的,那麼你可以使用這樣的事情:

pair = &([elem(&1, 0), elem(&1, 1)]) 
pair.({1,2}) #=> [1,2] 

但是這是一個簡單的例子,只有2個元素的元組的作品,但它會讓你明白你在做什麼錯。

+0

我特意想要避免現有的模塊函數,比如'to_list' – Bala