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

metaclass – 为什么我不能在Perl 6的ClassHOW对象上调用methods

发布时间:2020-12-16 06:21:08 所属栏目:大数据 来源:网络整理
导读:我可以在一个对象上调用^方法并列出我可以调用的方法名称: my $object = 'Camelia';my @object_methods = $object.^methods;@object_methods.map( { .gist } ).sort.join("n").say; ^methods 返回一个我存储在@object_methods中的列表,然后我通过在每个上
我可以在一个对象上调用^方法并列出我可以调用的方法名称:

my $object = 'Camelia';
my @object_methods = $object.^methods;
@object_methods.map( { .gist } ).sort.join("n").say;

^methods返回一个我存储在@object_methods中的列表,然后我通过在每个上面调用gist来转换方法thingys的列表,以获得该方法的人类感知形式.

但是,^ in ^方法是隐含的.HOW,如object documentation末尾所示,这也应该有效:

my $object = 'Camelia';
my @object_methods = $object.HOW.methods;

但是,我收到一个错误:

Too few positionals passed; expected 2 arguments but got 1
  in any methods at gen/moar/m-Metamodel.nqp line 490
  in block <unit> at...

并且,对于它的价值而言,这对于一种试图对这类事物是个人友好的语言来说是一个可怕的错误信息.文件m-Metamodel.nqp不是我的perl6安装的一部分.它甚至不是我可以google的东西,因为正如路径所暗示的那样,它是汇编产生的东西.而且,编译取决于版本.

解决方法

通过常规方法调用.将调用者作为隐式的第一个参数传递给方法.通过.^的元方法调用传递两个参数:元对象作为调用者,实例作为第一个位置参数.

例如

$obj.^can('sqrt')

是语法糖

$obj.HOW.can($obj,'sqrt')

在您的示例中,这将读取

my @object_methods = $object.HOW.methods($object);

(编辑:李大同)

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

    推荐文章
      热点阅读