class - 是否可以在 Raku 中访问类之外的静态方法和属性?

标签 class methods static attributes raku

在 raku 中,似乎可以定义静态方法(通过 sub 关键字)和静态属性(通过 my)这些可以在同一个类中引用。
但是,是否可以在类之外访问这些方法和属性?
类似的东西:

class MyClass {
    my $attribute = 123;
    sub my-method {
        say 'Hello';
    }
}

MyClass.$attribute;
MyClass.my-method;

最佳答案

it seems possible to define static methods (via sub keyword) and static attributes (via my) Those can be referenced inside the same class.


我能理解你为什么称它们为静态方法和属性,但 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 永远不会共享;没有 subour 声明符与 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。

关于class - 是否可以在 Raku 中访问类之外的静态方法和属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62920175/

相关文章:

java - 继承GAME的Api方法

c# - 如何在C#中获取类中的变量列表

java - 方法引用未按预期工作

java - 在 java 类中包含自动生成的方法

java - 类中静态 block 和静态变量的执行顺序是什么?

java - 实用程序类的静态成员(null)生命周期

python - 如何在不导入 python 文件的情况下获取类和函数的列表

ruby - 类对象的案例陈述

php - 使用 phpmsnclass 自动接受联系人

java - 将静态方法与 JFrame 结合使用