gpt4 book ai didi

erlang - 我可以在Erlang成立自己的卫队吗?

转载 作者:行者123 更新时间:2023-12-04 05:41:05 24 4
gpt4 key购买 nike

我在网上遇到了以下代码:

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.

它是我一直梦dream以求的Guard,因为它检查输入是否为字符串-但是,为什么我不允许在erlang中使用它,为什么呢?周围有工作吗?

我希望能够编写如下内容:
Fun(Str) when is_string(Str) -> Str;
Fun(Int) when is_integer(Int) -> io:format("~w", [Int]).

甚至更好地在邮件上使用它。

最佳答案

不允许在防护中使用用户定义的功能。这是因为保护程序中的函数必须没有副作用(例如,在函数中使用io:format)。在 guard 中,您仅限于以下情况:

  • 用于类型测试的BIF(is_atomis_constantis_floatis_integeris_listis_numberis_pidis_portis_referenceis_tupleis_binaryis_functionis_record li)
  • bool 运算符(notandorandalsoorelse,;),
  • 关系运算符(>>=<=<=:====/=/=),
  • 算术运算符(+-*divrem),
  • 按位运算符(bandborbxorbnotbslbsr),
  • 其他无副作用的BIF(abs/1element/2hd/1length/1node/1,2round/1size/1tl/1trunc/1self/0)
  • 关于erlang - 我可以在Erlang成立自己的卫队吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11177109/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com