me encontré con este código en la web:¿Puedo hacer mis propios guardias en Erlang?
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.
Su es el Guard I alwais soñado fuera, en la que se comprueba si una entrada es una cadena - cómo cada vez, no estoy autorizado para utilizarla en Erlang, ¿por qué es esto? Y hay un trabajo alrededor?
Me gustaría ser capaz de escribir cosas como:
Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).
o incluso mejor usarlo en los mensajes.
Sin ánimo de ofender, una mejor forma de probar cadenas de caracteres sería con los métodos: 'io_lib: printable_list/1' y' io_lib: printable_unicode_list/1' utilizados en combinación. –
Ver también [esto] (http://stackoverflow.com/questions/10861347/why-comparing-function-results-is-an-illegal-guard-exception-in-erlang), [this] (http: // stackoverflow.com/questions/6505213/is-there-a-way-to-use-local-function-in-guard), [this] (http://stackoverflow.com/questions/6927632/checking-for-membership -in-an-erlang-guard), [esto] (http: // stackoverflow.com/questions/2241340/unable-to-use-function-call-in-function-guard) y [this] (http://stackoverflow.com/questions/7474894/use-of-function-in-guard-not -allowed-suggestions-for-alternate-implementation-w) pregunta. – legoscia