class - 是否可以在 Raku 的类之外访问静态方法和属性?
问题描述
在 raku 中,似乎可以定义静态方法(通过sub
关键字)和静态属性(通过my
),它们可以在同一个类中引用。
但是,是否可以在类之外访问这些方法和属性?
与此类似的东西:
class MyClass {
my $attribute = 123;
sub my-method {
say 'Hello';
}
}
MyClass.$attribute;
MyClass.my-method;
解决方案
似乎可以定义静态方法(通过
sub
关键字)和静态属性(通过my
)它们可以在同一个类中引用。
我明白你为什么称它们为静态方法和属性,但 Raku 有一个更简单的解决方案:
class MyClass {
method my-method {
say 'Hello';
}
method attribute is rw {
state $attribute = 123
}
}
say MyClass.attribute; # 123
MyClass.attribute = 99;
say MyClass.attribute; # 99
MyClass.my-method; # Hello
您可以使用our sub
s 和our
变量。our
是用于定义词法的声明符,该词法也可在声明它的包之外使用。( my
s从不共享;sub
没有 an 的声明符our
与my sub
.)
所以:
class MyClass {
our sub my-sub {
say 'Hello';
}
our $attribute = 123
}
import MyClass;
say $MyClass::attribute; # 123
$MyClass::attribute = 99;
say $MyClass::attribute; # 99
MyClass::my-sub; # Hello
如您所见,这些不是方法。在先前的解决方案没有的意义上,这种方法忽略了 OOP。
推荐阅读
- javascript - 带有多选下拉菜单的 JavaScript 过滤器元素
- java - org.springframework.beans.BeanInstantiationException ,无法使用 Oracle 数据源
- pandas - 为什么包含多列的熊猫数据框说 10 的维度为 2?
- c++ - bq.o:server.cpp:(.text+0x20):在 VS Code 2020 中编译 tcp/ip 程序时未定义对 `__imp_socket' 的引用
- angular - Angular - 对文本框的值更改执行过滤器
- c - 尝试从链表中删除时,我丢失了整个列表,而不仅仅是一个 int
- sharepoint - Sharepoint 查找列表
- r - 按字母数字和数字参数聚合列
- google-cloud-platform - 如何使用 cloudarmor 为我的 gke 入口配置 DDoS?
- java - 构建签名APK时android studio中的gradle问题