似乎is-prime
和.is-prime
对待他们的论点的方式不同:
> is-prime('11')
True
> '11'.is-prime
No such method 'is-prime' for invocant of type 'Str'
in block <unit> at <unknown file> line 1
> is-prime(2.5)
False
> (2.5).is-prime
No such method 'is-prime' for invocant of type 'Rat'
in block <unit> at <unknown file> line 1
答案 0 :(得分:3)
以下是Int class
的例行定义proto sub is-prime($) is pure {*}
multi sub is-prime(Int:D \i) {
nqp::p6bool(nqp::isprime_I(nqp::decont(i), nqp::unbox_i(100)));
}
multi sub is-prime(\i) {
i == i.floor
&& nqp::p6bool(nqp::isprime_I(nqp::decont(i.Int), nqp::unbox_i(100)));
}
在第二个multi
中isprime_I
将其参数转换为.Int
。任何具有该方法的东西都可以返回一个可能是素数的整数。
这种不平衡我不喜欢Perl 6的事情之一。如果我们有一个可以这样做的例程,我们应该在类结构中将方法移到更高的位置。