【问题标题】:Is it possible to access static methods and attributes outside the class in Raku?是否可以在 Raku 的类之外访问静态方法和属性?
【发布时间】:2020-11-05 06:21:40
【问题描述】:

在 raku 中,似乎可以定义静态方法(通过 sub 关键字)和静态属性(通过 my),它们可以在同一个类中引用。

但是,是否可以在类之外访问这些方法和属性?

类似的东西:

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

MyClass.$attribute;
MyClass.my-method;

【问题讨论】:

    标签: class methods static attributes raku


    【解决方案1】:

    似乎可以定义静态方法(通过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 subs 和our 变量。 our 是用于定义一个词法的声明符,该词法 also 在它声明的包之外使用。 (mys 从不共享;没有 oursub 声明符与 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。

    【讨论】:

      猜你喜欢
      • 2015-05-25
      • 2017-09-18
      • 1970-01-01
      • 2021-11-24
      • 2018-12-10
      • 2012-03-30
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      相关资源
      最近更新 更多