Erlang中的When is_number(N)如何编写?

2024-11-20 21:16:37
推荐回答(2个)
回答1:

erlang里在函数名后加when是一个断言,当断言成立的时候执行剪头后的函数体。
Erlang里另一个要注意的地方是每一个字句都应该有一个确定的值,在代码中每个逗号前的都是一个字句。
如果改成sign(N) -> {N} when is_number(N),那这个子句就没有清晰的值了。
erlang的一个重要手段是匹配,在函数中基本不使用控制结构,像if,while那样的结构。
楼主如果希望在N是number的时候让函数返回N ,有几种做法。一种就是像上边楼主写的那样,当断言成立时执行函数操作,另一种可以用case if 语句,对结果进行匹配。
记住Erlang里本质使用的都是匹配。
额,不知道有没有说清楚

回答2:

sign(N) ->{N} when is_number(N)->

这个语法不正确,编译器会识别成两个函数,
函数名后面() 可以直接跟随 when ,不可以插入其它非guard操作.
{N},意思就是把N转化成一个tuple,也就是加件外衣,变种数据类型而已.
错误的原因不是说不能这么封装数据,而是函数与when之间搀杂了其它操作.