我试图回答这个问题,并认为我可以使用元对象协议向类添加属性.这是一个最小的例子,我尝试在构造后test向类中添加一个属性Configuration:
use v6;
class Configuration {
}
my $config = Configuration.new;
my $attr = Attribute.new(
:name('$.test'), # Trying to add a "test" attribute
:type(Str),
:has_accessor(1),
:package(Configuration)
);
$config.^add_attribute( $attr );
$config.^compose();
say "Current attributes: ", join ', ', $config.^attributes();
$attr.set_value( $config, "Hello" ); # <-- This fails with no such attribute '$.test'
say $config.test;
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我得到:
Current attributes: $.test
P6opaque: no such attribute '$.test' on type Configuration in a Configuration when trying to bind a …Run Code Online (Sandbox Code Playgroud)