я наткнулся на этот код в сети:Могу ли я сделать свою собственную гвардию в Эрланге?
is_char(Ch) ->
if Ch < 0 -> false;
Ch > 255 -> false;
true -> true
end.
is_string(Str) ->
case is_list(Str) of
false -> false;
true -> lists:all(is_char, Str)
end.
Его является охрана Я alwais снилось прочь, в том, что он проверяет, если входной строки - как всегда, я не разрешается использовать в erlang, почему это? И есть ли работа вокруг?
Я хотел бы иметь возможность писать такие вещи, как:
Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).
или даже лучше использовать его в сообщениях.
Не обижайтесь, но лучшим способом тестирования для строк были бы методы: 'io_lib: printable_list/1' и' io_lib: printable_unicode_list/1', используемые в комбинации. –
См. Также [это] (http://stackoverflow.com/questions/10861347/why-comparing-function-results-is-an-illegal-guard-exception-in-erlang), [это] (http: // stackoverflow.com/questions/6505213/is-there-a-way-to-use-local-function-in-guard), [это] (http://stackoverflow.com/questions/6927632/checking-for-membership -in-an-erlang-guard), [это] (http: // stackoverflow.com/questions/2241340/неспособный к использованию-функция-вызов-в-функции-защита) и [это] (http://stackoverflow.com/questions/7474894/use-of-function-in-guard-not -allowed-ideas-for-alternate-implementation-w). – legoscia