2

我已经定义了一个函数如下

bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date()
    -> "";
bc_link_for(_)
    -> "something".

第二个守卫声明是针对未来日期的。当我编译这个程序时,我得到了错误illegal guard expression。关于在警戒语句中使用日期类型的在线帮助并不多。

4

2 回答 2

2

Guard Expressions 在它们允许的范围内是有限的。这是为了帮助优化器,等等。它们记录在这里:

http://www.erlang.org/doc/reference_manual/expressions.html#id79673

于 2013-01-26T20:56:55.520 回答
2

守卫中通常不允许使用功能,除了特定的守卫功能,如is_integer, is_float, is_list,length等。

但在你的情况下,erlang:date()是什么引发了错误。

您只需要在函数内部进行比较:

bc_link_for(Date) ->
    case Date < {2010, 1, 4} orelse Date > erlang:date() of
        true -> "";
        false -> "something"
    end.

在守卫中使用元组进行比较是完全可以接受的。

于 2013-01-26T21:33:06.723 回答