【发布时间】:2021-02-28 16:05:16
【问题描述】:
如果我有一个Role R 定义为:
role R { method answer { 42 } }
这两行有什么区别(如果有的话):
my $a = 'question' does R;
my $b = 'question' but R;
它们看起来非常相似:
say $a.answer; # OUTPUT: «42»
say $b.answer; # OUTPUT: «42»
say $a.WHAT; # OUTPUT: «(Str+{R})»
say $b.WHAT; # OUTPUT: «(Str+{R})»
这是否表明有不止一种方法可以做到™,而这两者的含义相同?还是有我遗漏的细微差别?
注意:
我知道does 是both an operator and a trait,因此可以用于编译时混入(例如class C does R {}),而but 仅用于运行时混入。我也知道but 可以是used with an object(例如my $c = 'question' but False),而does 只能与Role 一起使用。我不是在问这些差异中的任何一个。我唯一的问题是两者在运行时与Role 一起使用时是否有区别。我已经阅读了documentation section on mixing in Role,但没有看到答案。
【问题讨论】:
标签: oop mixins raku composition rakudo