Wait the light to fall

Posts categorized in ‘Raku’ (7)

Raku 中的实例属性

Raku 中的实例属性 在 Raku 中, 默认情况下, 一个对象的方法是完全可以访问的, 但它的数据(作为属性)不能在类外直接访问, 除非明确指定。为了从外部读取、写入或两者都能访问数据, 你必须以某种方式将其公开。你允许对一个对象的数据进行何种级别的访问, 主要取决于你声明它的属性的方式。 $! twigil 让我们从一个简单的 Raku 类定义的例子开始。 # person01.raku class Person { has $!name; } my $john = Person.new(name => 'Suth'); # 默认地, 传递给 new # 的参数必须是命名的(键值对儿) put $john.name; #=> Error: No such method 'name' for invocant # of type 'Person'. 在这个例子中, 你既不能通过新的构造函数设置一个属性的值(例如, john 的名字), 也不能检索它, 因为它根本没有被设置过。用$! twigil 声明的属性是私有的, 只能在类内通过! 这意味着即使是默认的 new 构造函数也不能在对象构造过程中用来设置一个显式的 $!-declared属性。 一个直接的解决方案是通过为我们的类实现一个 TWEAK 子方法来自己处理属性初始化。在 Raku 中, 在对象构造的不同阶段会调用多个例程, TWEAK 是其中最后一个。我不会去细说细节, 但简而言之, TWEAK 子方法允许你根据其他属性或实例变量的值为实例变量赋值。