我刚开始在Erlang,发现很难理解.我想将列表拆分为一个字符串,string:titlecase在其上运行,并将其加入一个字符串.
namecase(Text) ->
TextArray = string:split(Text, " ", all),
lists:join(" ", lists:foreach(fun(Element) -> string:titlecase(Element) end, TextArray)).
Run Code Online (Sandbox Code Playgroud)
但它失败并显示错误消息,escript: exception error: no function clause matching lists:join(" ",ok) (lists.erl, line 1449)因为它返回ok,为什么它返回正常?
Dog*_*ert 10
lists:foreach不返回传递给它的函数返回的值.它意味着与仅产生副作用的功能(例如打印)一起使用.你在找lists:map.
1> Text = "foo bar baz".
"foo bar baz"
2> TextArray = string:split(Text, " ", all).
["foo","bar","baz"]
3> lists:join(" ", lists:map(fun(Element) -> string:titlecase(Element) end, TextArray)).
["Foo"," ","Bar"," ","Baz"]
Run Code Online (Sandbox Code Playgroud)
而且,使用fun module:name/arity语法可以缩短匿名函数:
4> lists:join(" ", lists:map(fun string:titlecase/1, TextArray)).
["Foo"," ","Bar"," ","Baz"]
Run Code Online (Sandbox Code Playgroud)