我已经定义了一个函数,如下所示
bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date()
-> "";
bc_link_for(_)
-> "something".
第二个警卫声明是针对未来的日期。当我编写此程序时,我收到错误illegal guard expression
。在guard语句中使用日期类型并没有太多帮助。
答案 0 :(得分:2)
Guard表达式受限于其中允许的内容。这有助于优化器等。它们记录在这里:
http://www.erlang.org/doc/reference_manual/expressions.html#id79673
答案 1 :(得分: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.
在比较中使用元组是完全可以接受的。