【发布时间】:2018-04-22 20:40:06
【问题描述】:
如果我有一个公共方法,我可以在其类中使用$.name 和self.name 调用它:
class TEST {
has Int $.a;
method b($x) {
return $!a * $x;
}
method c($y) {
return self.b($y) * 3; # or $.b($y)
}
}
my $m = TEST.new(a => 10);
say $m.c(2); # 60
但是如果我将b设为私有方法,我只能用self!b调用它,而不是$!b,否则我会收到以下错误消息:
Attribute $!b not declared in class TEST
这条规则的背后是什么?在自己的类中调用方法的规则是什么?
【问题讨论】:
-
我认为以下是正确的。我希望它会有所帮助。
$!bar、$!baz等总是指私有属性。总是。即使文档另有说明,属性始终是私有的。foo!bar或!baralways 指的是私有方法,而不是属性(尽管他们的代码可以)。foo.bar或.baralways 指的是公共方法。 从不 编写foo.bar(...)或.bar(...)以使用公共访问器获取或设置私有属性的值;而是只写foo.bar或.bar来读取,foo.bar = ...或.bar =来获取或设置foo的$!bar属性的值。 -
如果您需要一个可以设置私有属性的公共访问器,请确保在属性声明中添加
is rw。
标签: raku