我可以在一个对象上调用tclsh
并列出我可以调用的方法名称:
^methods
^methods
返回一个我存储在my $object = 'Camelia';
my @object_methods = $object.^methods;
@object_methods.map( { .gist } ).sort.join("\n").say;
中的列表,然后我通过在每个方法上调用gist
来转换方法thingys列表,以获得该方法的人类感知形式啄。
但是,@object_methods
中的^
是隐含的^methods
,如object documentation所示,这也应该有用:
.HOW
但是,我收到一个错误:
my $object = 'Camelia';
my @object_methods = $object.HOW.methods;
并且,对于它的价值,这对于一种试图对这类事物友好的语言来说是一个可怕的错误信息。文件 m-Metamodel.nqp 不是我的perl6安装的一部分。它甚至不是我可以google的东西,因为正如路径所暗示的那样,它是汇编产生的东西。而且,编译取决于版本。
答案 0 :(得分:5)
通过.
的常规方法调用将调用者作为隐式的第一个参数传递给方法。通过.^
的元方法调用传递两个参数:元对象作为调用者,实例作为第一个位置参数。
例如
$obj.^can('sqrt')
是
的语法糖$obj.HOW.can($obj, 'sqrt')
在您的示例中,这将是
my @object_methods = $object.HOW.methods($object);