gpt4 book ai didi

date - 在 Perl 6 中查找上周五的日期?

转载 作者:行者123 更新时间:2023-12-04 18:01:13 27 4
gpt4 key购买 nike

我想生成一个从周一到周四的上周五结束的序列,如果序列从周六和周日开始,则生成前一周的周五。也就是说,假设今天是 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

为什么 &&第一种情况是错误的? ...运营商说:

The right-hand side will have an endpoint, which can be Inf or * for "infinite" lists (whose elements are only produced on demand), an expression which will end the sequence when True, or other elements such as Junctions.


&&出了什么问题运算符(operator)?

最佳答案

问题是你的结束条件

*.day-of-week==5 && *.week[1]+1==Date.today.week[1]

那是两个分别接受 1 个参数的任何代码 lambda。

*.day-of-week==5

*.week[1]+1==Date.today.week[1]

由于代码对象是真值, &&运算符移动到第二个。所以当它到达前一周的星期日时,序列就会停止。

即使代码是单个 lambda,它也不会像您期望的那样工作,因为它将是一个带有两个参数的 lambda。

进行此检查的正确方法是使用某种块。

{.day-of-week==5 && .week-number+1 == Date.today.week-number}

将它包装在子例程中可能是一个好主意,以便您可以对其进行测试。

sub last-friday ( Date:D $date ) {
# cache it so that it doesn't have to be looked up on each iteration
my $week-number = $date.week-number - 1;

(
$date,
*.earlier( :1day )

...

{
.day-of-week == 5
&&
.week-number == $week-number
}
).tail
}

say last-friday Date.new: :year(2018), :month( 5), :day( 9); # 2018-05-04
say last-friday Date.new: :year(2018), :month( 5), :day(12); # 2018-05-04

say Date.today.&last-friday; # 2018-05-04

您也可以只计算正确的日期。

sub last-friday ( Date:D $date ) {
$date.earlier:
days => (
$date.day-of-week # reset to previous sunday
+ 2 # go two days earlier to get friday
)
}

say last-friday Date.new: :year(2018), :month( 5), :day( 9); # 2018-05-04
say last-friday Date.new: :year(2018), :month( 5), :day(12); # 2018-05-04

say Date.today.&last-friday; # 2018-05-04

关于date - 在 Perl 6 中查找上周五的日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50245452/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com