示例1:
#!/usr/bin/env raku
use v6.d;
sub MAIN(Int $int) {
say 'parameter $int: ', $int.^name;
}
--output:--
$ raku b.raku 10
parameter $int: IntStr
Run Code Online (Sandbox Code Playgroud)
示例2:
#!/usr/bin/env raku
use v6.d;
sub MAIN(Str $str) {
say 'parameter $str: ', $str.^name;
}
--output:--
$ raku b.raku 10
parameter $str: IntStr
$ raku b.raku hello
parameter $str: Str
$ raku b.raku 10hello
parameter $str: Str
$ raku b.raku 6.5
parameter $str: RatStr
Run Code Online (Sandbox Code Playgroud)
示例3:
#!/usr/bin/env raku
use v6.d;
multi sub MAIN(Int $int) {
say 'parameter $int: ', $int.^name;
}
multi sub MAIN(Str $str,) {
say 'parameter $str: ', $str.^name;
}
--output:--
raku b.raku 10
Ambiguous call to 'MAIN(IntStr)'; these signatures all match:
(Int $int)
(Str $str)
in block <unit> at b.raku line 2
Run Code Online (Sandbox Code Playgroud)
好吧,这对我来说很有意义:IntStr类型既匹配Int类型又匹配Str类型。(在 erlang/elixir 中,第一个匹配的函数子句将获胜。)
接下来,如果我向 MAIN() 的第二个子句添加一个可选参数,歧义就会消失:
示例4:
#!/usr/bin/env raku
use v6.d;
multi sub MAIN(Int $int) {
say 'parameter $int: ', $int.^name;
}
multi sub MAIN(Str $str, Int $x?) {
say 'parameter $str: ', $str.^name;
}
--output:--
raku b.raku 10
parameter $int: IntSt
Run Code Online (Sandbox Code Playgroud)
在这种情况下,执行第一个子句MAIN()。用什么规则来解释呢?
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |