如何解决在Raku类定义中,“具有”关键字在“方法”之前是什么意思?
最近我意识到我完全是错误地编写了这样的Raku类之一:
class Foo {
has method bar {
return 'some string';
}
}
我惊讶地发现has method
不是错误,并且按预期工作。
在这种情况下,has
在做什么?这是故意的行为吗?
解决方法
has
是作用域声明符,与my
,our
,state
和anon
等类别相同。 has
范围内的内容已安装在当前包的元类中。
类似变量的东西总是用显式范围声明,例如:
my $lexical-var;
my $.lexical-var-with-accessor;
has $!attribute;
has $.attribute-with-accessor;
许多其他构造可以可选地指定其作用域,但具有合理的默认值。例如:
-
my sub marine() { }
-与没有my
的情况相同
-
our class Struggle { }
-与没有our
的情况相同
-
has method in-the-madness() { }
-与没有has
的情况相同
方法的最常见替代范围可能是anon
,这在元编程时很有用。例如,如果我们正在编写一个要使用MOP构造另一个类的类,则可以编写:
$the-class.^add_method('name',anon method name() { $name });
这意味着我们最终不会将方法name
安装在当前所在的类中。但是,在大多数情况下,我们希望使用has
范围。显式指定它无害,就像在my
之前写sub
一样无害;只是重申默认设置。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。