2016-08-13 54 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