在变量中§

请参阅主要文档 in context,了解augment 声明符

使用 augment,您可以向现有类和语法添加方法,但不能添加属性,前提是您首先激活了 MONKEY-TYPING pragma。

由于类通常是 our 作用域的,因此是全局的,这意味着修改全局状态,这是强烈不鼓励的。对于几乎所有情况,都有更好的解决方案。

# don't do this 
use MONKEY-TYPING;
augment class Int {
    method is-answer { self == 42 }
}
say 42.is-answer;       # OUTPUT: «True␤»

(在这种情况下,更好的解决方案是使用 函数)。

对于一个更好、更安全的示例,这是一个创建类模块以通过添加当前缺少的方法来扩展 IO::Path 的实用方法,以生成删除 extension 后留下的 basename 部分。(请注意,对于该部分的名称或甚至应该如何构建该部分,没有明确的开发者共识。)

unit class IO::Barename is IO::Path;
 
method new(|c{
    return self.IO::Path::new(|c);
}
 
use MONKEY-TYPING;
augment class IO::Path {
    method barename {
        self.extension("").basename;
    }
}