списки: foreach возвращает нормально в Erlang - PullRequest
0 голосов
/ 26 сентября 2018

Я только начал в Эрланге и мне трудно это понять.Я хочу разбить список на строку, запустить на нем string:titlecase и соединить его в строку.

namecase(Text) ->
    TextArray = string:split(Text, " ", all),
    lists:join(" ", lists:foreach(fun(Element) -> string:titlecase(Element) end, TextArray)).

, но это не удается с сообщением об ошибке escript: exception error: no function clause matching lists:join(" ",ok) (lists.erl, line 1449), поскольку он возвращает ok,Почему он возвращается нормально?

1 Ответ

0 голосов
/ 26 сентября 2018

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"]

. Кроме того, анонимную функцию можно сократить, используя синтаксис fun module:name/arity:

4> lists:join(" ", lists:map(fun string:titlecase/1, TextArray)).
["Foo"," ","Bar"," ","Baz"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...