为什么这不起作用:
iex(2)> Enum.map(["the", "huge", "elephant"], String.length)
** (UndefinedFunctionError) function String.length/0 is undefined or private.
但这样做:
iex(2)> Enum.map(["the", "huge", "elephant"], fn x -> String.length(x) end)
[3, 4, 8]
我的意思是,String.length是一个函数,对吧?就像我的匿名包装一样?或者根据错误消息是否存在某种范围问题?
我对另一种功能性(ish)语言的唯一体验是R,这样可以正常工作:
> sapply(c("the", "huge", "elephant"), nchar)
the huge elephant
3 4 8
> sapply(c("the", "huge", "elephant"), function(x) nchar(x))
the huge elephant
3 4 8
答案 0 :(得分:5)
String.length
是一个函数但是由于Elixir允许调用没有括号的函数,当你键入String.length
时,你实际上并没有得到一个函数,而是调用该函数的结果为0参数。您必须使用&module.function/arity
语法:
iex(1)> Enum.map(["the", "huge", "elephant"], &String.length/1)
[3, 4, 8]