Syntax 什么是;有",;关键字“之前的平均值”;方法“;在Raku类定义中?

Syntax 什么是;有",;关键字“之前的平均值”;方法“;在Raku类定义中?,syntax,raku,Syntax,Raku,最近,我意识到我完全是错误地编写了我的一个Raku类,如下所示: class Foo { has method bar { return 'some string'; } } 我惊讶地意识到has方法不是一个错误,并且按照预期工作 在这种情况下,有做什么?这是故意的行为吗?has是一个范围声明符,与my、our、state和anon属于同一类别。在当前包的元类中安装了具有作用域的内容 类似变量的事物总是使用显式范围声明,例如: my $lexical-var; my $.lex

最近,我意识到我完全是错误地编写了我的一个Raku类,如下所示:

class Foo {
  has method bar {
    return 'some string';
  }
}
我惊讶地意识到
has方法
不是一个错误,并且按照预期工作


在这种情况下,
做什么?这是故意的行为吗?

has
是一个范围声明符,与
my
our
state
anon
属于同一类别。在当前包的元类中安装了
具有
作用域的内容

类似变量的事物总是使用显式范围声明,例如:

my $lexical-var;
my $.lexical-var-with-accessor;
has $!attribute;
has $.attribute-with-accessor;
许多其他构造可以选择性地指定其作用域,但附带一个合理的默认值。例如:

my $lexical-var;
my $.lexical-var-with-accessor;
has $!attribute;
has $.attribute-with-accessor;
  • my sub-marine(){}
    -与没有
    my
  • 我们的阶级斗争{}
    -与没有
    我们的
  • has-in-the-madness(){}
    -与没有
    has的方法相同
方法最常见的替代范围可能是
anon
,这在元编程时很有用。例如,如果我们正在编写一个将要使用MOP构造另一个类的类,我们可以编写:

$the-class.^add_method('name', anon method name() { $name });

这意味着我们不会在当前类中安装方法
name
。然而,在大多数情况下,我们希望
具有
范围。明确地指定它没有坏处,就像在
sub
之前编写
my
没有坏处一样;这只是重申默认值。

喜欢这些例子:-)