无法使用 Raku 官方文档中有关角色的示例
从 docs.raku ,我在rakudo 2022.03
platform-pro (pro) in ~ via ⬢ v12.4.0
❯ raku ~
Welcome to Rakudo™ v2022.03.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.03.
To exit type 'exit' or '^D'
> role Canine {
* method bark { ... }
* }
(Canine)
> class Dog does Canine {
* method bark { say "Woof" }
* }
===SORRY!=== Error while compiling:
Package 'Dog' already has a method 'bark' (did you mean to declare a multi method?)
at line 2
我更改 以下错误时,多数的方法,但是:
> role Canine {
* method bark { ... }
* }
(Canine)
> class Dog does Canine {
* multi method bark { say "Woof" }
* }
===SORRY!=== Error while compiling:
No appropriate parametric role variant available for 'Canine':
Ambiguous call to '(Dog)'; these signatures all match:
(::$?CLASS ::::?CLASS Mu $)
(::$?CLASS ::::?CLASS Mu $)
多亏了评论,这似乎是一个问题:
role Canine {
method bark { say "Woof" };
}
class Dog does Canine {
method bark { say "Woof" };
}
my $d = Dog.new();
$d.bark
如果将其保存到文件并执行
☸ platform-pro (pro) in learn/raku/stackoverflow via
Following this defenitions from docs.raku, I get the following error with rakudo 2022.03
platform-pro (pro) in ~ via ⬢ v12.4.0
❯ raku ~
Welcome to Rakudo™ v2022.03.
Implementing the Raku® Programming Language v6.d.
Built on MoarVM version 2022.03.
To exit type 'exit' or '^D'
> role Canine {
* method bark { ... }
* }
(Canine)
> class Dog does Canine {
* method bark { say "Woof" }
* }
===SORRY!=== Error while compiling:
Package 'Dog' already has a method 'bark' (did you mean to declare a multi method?)
at line 2
I changed the method to multi but:
> role Canine {
* method bark { ... }
* }
(Canine)
> class Dog does Canine {
* multi method bark { say "Woof" }
* }
===SORRY!=== Error while compiling:
No appropriate parametric role variant available for 'Canine':
Ambiguous call to '(Dog)'; these signatures all match:
(::$?CLASS ::::?CLASS Mu $)
(::$?CLASS ::::?CLASS Mu $)
Thanks to the comments it seems a problem in the REPL:
role Canine {
method bark { say "Woof" };
}
class Dog does Canine {
method bark { say "Woof" };
}
my $d = Dog.new();
$d.bark
if save this to a file and execute
☸ platform-pro (pro) in learn/raku/stackoverflow via ???? v3.9.10 (python-3.9.10) via ???? v6.d v2022.03
❯ raku prueba-roles.raku ~/learn/raku/stackoverflow
Woof
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论