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的出色回复,卫兵不能调用任意函数的原因是必须保证它们没有副作用。看见