Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Date 在erlang函数的guard语句中使用日期_Date_Erlang_Guard - Fatal编程技术网

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

Date 在erlang函数的guard语句中使用日期,date,erlang,guard,Date,Erlang,Guard,我定义了一个函数,如下所示 bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date() -> ""; bc_link_for(_) -> "something". 当日期erlang:Date()时(日期)的链接 -> ""; bc_链接_用于(u) ->“某物”。 第二个守卫声明是关于未来的日期。当我编译这个程序时,我得到了错误非法的保护表达式。关于在guard语句中使

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

bc_link_for(Date) when Date < {2010, 1, 4} orelse Date > erlang:date()
    -> "";
bc_link_for(_)
    -> "something".
当日期<{2010,1,4}orelse Date>erlang:Date()时(日期)的链接 -> ""; bc_链接_用于(u) ->“某物”。
第二个守卫声明是关于未来的日期。当我编译这个程序时,我得到了错误
非法的保护表达式
。关于在guard语句中使用日期类型,在线上没有太多帮助

保护表达式在允许的范围内受到限制。这是为了帮助优化器。它们记录在这里:


保护表达式在允许的范围内受到限制。这是为了帮助优化器。它们记录在这里:


保护中通常不允许使用功能,但特定的保护功能除外,如
为整数
为浮点
为列表
长度

但在您的例子中,
erlang:date()
是引发错误的原因

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

bc_link_for(Date) ->
    case Date < {2010, 1, 4} orelse Date > erlang:date() of
        true -> "";
        false -> "something"
    end.
bc\u链接(日期)->
案例日期<{2010,1,4}orelse Date>erlang:Date()的
对->“”;
false->“某物”
结束。

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

函数通常不允许在guards中使用,但特定的guards函数除外,如
是整数
是浮点
是列表
长度
,等等

但在您的例子中,
erlang:date()
是引发错误的原因

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

bc_link_for(Date) ->
    case Date < {2010, 1, 4} orelse Date > erlang:date() of
        true -> "";
        false -> "something"
    end.
bc\u链接(日期)->
案例日期<{2010,1,4}orelse Date>erlang:Date()的
对->“”;
false->“某物”
结束。

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

所以我的第一个guard语句被接受,因为它被认为是正常的元组而不是日期类型?所以我的第一个guard语句被接受,因为它被认为是正常的元组而不是日期类型?再加上@chops的精彩回复,卫兵不能调用任意函数的原因是必须保证它们没有副作用。看,除了@chops的出色回复,卫兵不能调用任意函数的原因是必须保证它们没有副作用。看见