【发布时间】:2018-05-09 04:19:26
【问题描述】:
我想生成一个从周一到周四在上周五结束的序列,如果序列从周六和周日开始,则生成前一周的周五。也就是说,假设今天是2018-05-09,那么上周五是2018-05-04,
如果今天是2018-05-12,那么上周五也是 2018-05-04。所以我写:
(Date.today, *.earlier(:1day) ... ( *.day-of-week==5 && *.week[1]+1==Date.today.week[1] )).tail # Output: 2018-05-06
但结果是2018-05-06 而不是2018-05-04。
然后我用了Junction:
(Date.today, *.earlier(:1day) ... all( *.day-of-week==5, *.week[1]+1==Date.today.week[1] )).tail # Output: 2018-05-04
为什么&&在第一种情况下是错误的? ... 运算符表示:
右侧将有一个端点,可以是 Inf 或 * 表示“无限”列表(其元素仅按需生成),一个表达式将在 True 时结束序列,或其他元素,例如 Junctions .
&& 运算符有什么问题?
【问题讨论】:
-
第一个序列发出关于在接收器上下文中无用使用的错误。第二个也有同样的问题。我不认为 && 本身有什么问题。
-
我认为在第一个序列中,“tail”只影响序列终止符。在第二种情况下,它的位置很好,但实际上关闭序列的是
*.day-of-week==5条件,这与我在下面使用的相同。 -
对不起,我加了括号