在erlang函数的guard语句中使用日期

时间:2013-01-26 20:14:08

标签: date erlang guard

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

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

第二个警卫声明是针对未来的日期。当我编写此程序时,我收到错误illegal guard expression。在guard语句中使用日期类型并没有太多帮助。

2 个答案:

答案 0 :(得分:2)

Guard表达式受限于其中允许的内容。这有助于优化器等。它们记录在这里:

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

答案 1 :(得分:2)

除了is_integeris_floatis_listlength等具体保护功能外,警卫通常不允许使用这些功能。

但在你的情况下,erlang:date()正在抛出错误。

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

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

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