tôi đến accross mã này trên trang web:Tôi có thể tự bảo vệ mình tại Erlang không?
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.
là Guard tôi alwais mơ đi, ở chỗ nó kiểm tra nếu một đầu vào là một chuỗi của nó - làm thế nào bao giờ, tôi không được phép sử dụng nó trong erlang, tại sao thế này? Và có một công việc xung quanh?
Tôi muốn để có thể viết những thứ như:
Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).
hoặc thậm chí tốt hơn sử dụng nó trên tin nhắn.
Không vi phạm nhưng cách tốt hơn để kiểm tra chuỗi là phương pháp: 'io_lib: printable_list/1' và' io_lib: printable_unicode_list/1' được sử dụng kết hợp. –
Xem thêm [this] (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), [this] (http: // stackoverflow.com/questions/2241340/không thể sử dụng-chức năng-gọi-trong-chức năng-guard) và [this] (http://stackoverflow.com/questions/7474894/use-of-function-in-guard-not -cho phép-đề xuất-cho-thay-thực hiện-w) câu hỏi. – legoscia