Perl 6 中的 .is-prime 和 is-prime() 之间有什么区别吗?

Is there some difference between .is-prime and is-prime() in Perl 6?

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

这是 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。任何具有该方法的东西都可以 return 一个可能是质数的整数。

这种不平衡是我不喜欢 Perl 6 的地方之一。如果我们有一个可以这样做的例程,我们应该将该方法移到 class 结构中更高的位置。