gpt4 book ai didi

class - 指向perl6中类的构造函数的指针

转载 作者:行者123 更新时间:2023-12-04 14:09:01 24 4
gpt4 key购买 nike

我正在尝试使用 Perl 6 编写一些类,只是为了测试 Perl 6 类和方法。

这是代码:

class human1 {
method fn1() {
print "#from human1.fn1\n";
}
}

class human2 {
method fn1() {
print "#from human2.fn1\n";
}
}

my $a = human1.new();
my $b = human2.new();

$a.fn1();
$b.fn1();

print "now trying more complex stuff\n";

my $hum1_const = &human1.new;
my $hum2_const = &human2.new;

my $c = $hum2_const();
$c.fn1();

本质上,我希望能够使用 human1构造函数或 human2能够构建 $c 的构造函数动态对象。但我收到以下错误:
Error while compiling /usr/bhaskars/code/perl/./a.pl6
Illegally post-declared types:
human1 used at line 23
human2 used at line 24

如何创建 $c使用函数指针来选择我使用的构造函数?

最佳答案

要获得对 .new 的“引用”您必须使用元对象协议(protocol)。
.^lookup , 或 .^find_method .

my $hum1-create = human1.^find_method('new');

这仍然不是您要寻找的,因为方法需要一个类对象或一个实例作为它们的第一个参数。

my $c = $hum1-create( human1 );

因此,您可能希望将类作为该方法的第一个参数。

my $hum1-create = human1.^find_method('new').assuming(human1);

my $c = $hum1-create();

请注意 .assuming 在这种情况下,基本上做同样的事情

-> |capture { human1.^find_method('new').( human1, |capture ) }

所以你可以写:

my $hum1-create = -> |capture { human1.new( |capture ) }

或者如果你永远不会给它一个论点

my $hum1-create = -> { human1.new }

您也可以将其存储在 & sigiled 变量,因此您可以像使用普通子程序一样使用它。

my &hum1-create = human1.^find_method('new').assuming(human1);

my $c = hum1-create;

关于class - 指向perl6中类的构造函数的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47994213/

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