加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl6 – Perl 6中的.is-prime和is-prime()之间是否有一些区别?

发布时间:2020-12-15 21:44:39 所属栏目:大数据 来源:网络整理
导读:似乎是素数和.is-prime以不同的方式对待他们的论点: is-prime('11')True '11'.is-primeNo 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-primeNo such method 'is-prime' for invo
似乎是素数和.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转换其参数.任何具有该方法的东西都可以返回一个可能是素数的整数.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读