3.days.ago在Perl6中的实现

前端之家收集整理的这篇文章主要介绍了3.days.ago在Perl6中的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想实现像3.days.ago和2.months.from_now这样的时间计算.
是可以将方法扩展到Int,还是运算符覆盖可以做到这一点?

1.day.ago      # equivalent to yesterday
1.day.from_now # equivalent to tomorrow

解决方法

要准确得到你的要求:

use MONKEY-TYPING;
augment class Int {

    my class Date::Offset {
        has Pair $.offset is required;

        method ago () {
            Date.today.earlier( |$!offset )
        }

        method from-now () {
            Date.today.later( |$!offset )
        }
    }

    method days () {
        Date::Offset.new( offset => days => self );
    }
    method months () {
        Date::Offset.new( offset => months => self );
    }
}

say 1.days.ago;      # 2017-03-13
say Date.today;      # 2017-03-14
say 1.days.from-now; # 2017-03-15

say 1.months.ago;    # 2017-02-14

既然我已经告诉你如何,请不要.您最终可能会以非常难以排除故障的方式影响您不想要的代码.
(有正当理由做这样的事情,但我不认为这是其中之一)

如果你想弄乱基本操作的发生方式,那就要用词汇方式来做.

{
    sub postfix:« .days.ago » ( Int:D $offset ) {
        Date.today.earlier( days => $offset )
    }

    sub postfix:« .days.from-now » ( Int:D $offset ) {
        Date.today.later( days => $offset )
    }

    sub postfix:« .months.ago » ( Int:D $offset ) {
        Date.today.earlier( months => $offset )
    }

    sub postfix:« .months.from-now » ( Int:D $offset ) {
        Date.today.later( months => $offset )
    }

    say 1.days.ago;      # 2017-03-13
    say Date.today;      # 2017-03-14
    say 1.days.from-now; # 2017-03-15

    say 1.months.ago;    # 2017-02-14

}

say 1.days.ago; # error

猜你在找的Perl相关文章