【发布时间】:2018-11-07 18:39:42
【问题描述】:
理论上,你可以mix in a role into an object in runtime。所以我试图用一个函数来做到这一点:
my &random-f = -> $arg { "Just $arg" };
say random-f("boo");
role Argable {
method argh() {
self.CALL-ME( "argh" );
}
}
&random-f does Argable;
say random-f.argh;
在角色内部,我使用self 来引用已经定义的函数,CALL-ME 来实际调用角色内部的函数。但是,这会导致以下错误:
Too few positionals passed; expected 1 argument but got 0
in block <unit> at self-call-me.p6 line 5
我真的不知道谁在期待 1 个参数。从理论上讲,它应该是CALL-ME 函数,但谁知道呢。消除self. 会产生不同的错误:CALL-ME used at line 11。将does Callable 添加到Argable (将self 放回后)会导致相同的错误。这可以做到吗?知道怎么做吗?
【问题讨论】: