gpt4 book ai didi

metaclass - 为什么我不能在 Perl 6 的 ClassHOW 对象上调用 methods 方法?

转载 作者:行者123 更新时间:2023-12-05 00:56:46 25 4
gpt4 key购买 nike

我可以打电话^methods在一个对象上并列出我可以调用的方法名称:

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

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

但是, ^^methods是隐含的 .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...

而且,就其值(value)而言,对于试图对此类事情保持人性化的语言来说,这是一个可怕的错误消息。文件 m-Metamodel.nqp 不是我的 perl6 安装的一部分。它甚至不是我可以用谷歌搜索的东西,因为正如路径所暗示的那样,它是编译生成的东西。而且,该编译取决于版本。

最佳答案

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

例如

$obj.^can('sqrt')

是语法糖
$obj.HOW.can($obj, 'sqrt')

在您的示例中,这将读取
my @object_methods = $object.HOW.methods($object);

关于metaclass - 为什么我不能在 Perl 6 的 ClassHOW 对象上调用 methods 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35819026/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com