我已经定义了一个函数如下
bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date()
-> "";
bc_link_for(_)
-> "something".
第二个守卫声明是针对未来日期的。当我编译这个程序时,我得到了错误illegal guard expression
。关于在警戒语句中使用日期类型的在线帮助并不多。
Guard Expressions 在它们允许的范围内是有限的。这是为了帮助优化器,等等。它们记录在这里:
http://www.erlang.org/doc/reference_manual/expressions.html#id79673
守卫中通常不允许使用功能,除了特定的守卫功能,如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.
在守卫中使用元组进行比较是完全可以接受的。