在词汇表中§
有关角色,请参阅主要文档 上下文
角色、混入或特征定义接口和/或这些接口的实现,以及使用它们的实例变量,并在声明遵循该接口的类时进行混入。抽象类 是角色的特定示例,其中实际实现被推迟到使用该角色的类。
角色是 Raku 的对象系统的一部分,并使用role关键字声明,并通过does在类声明中使用。
在面向对象中§
有关角色,请参阅主要文档 上下文
角色是属性和方法的集合;但是,与类不同,角色只用于描述对象行为的一部分;这就是为什么通常角色旨在混入类和对象中的原因。通常,类用于管理对象,而角色用于管理对象中的行为和代码重用。
角色使用关键字 role
放在所声明角色的名称之前。使用 does
关键字混入角色,该关键字放在所混入角色的名称之前。
还可以使用 is
将角色混入类。但是,is
与角色的语义与 does
提供的语义有很大不同。使用 is
,可以从角色中双关类,然后从该类继承。因此,没有扁平化组合,也没有 does
提供的任何安全性。
constant ⲧ = " " xx 4; #Just a ⲧabdoes Notablemy = Journey.new( :origin<Here>, :destination<There>,travelers => <þor Freya> );.notes("First steps");notes : "Almost there";print ;# OUTPUT:#⤷ Here# First steps# Almost there##There ⤶
一旦编译器解析了角色声明的结束花括号,角色就会变得不可变。