Могу ли я создать свои собственные Guards в 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.

Это Guard, о котором я всегда мечтал, поскольку он проверяет, является ли ввод строкой — как бы то ни было, я' m не разрешено использовать его в erlang, почему это так? И есть ли обходной путь?

Я хотел бы иметь возможность писать такие вещи, как:

Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).

или даже лучше использовать это в сообщениях.

8
задан Martin Kristiansen 24 June 2012 в 11:36
поделиться