这不应该有效吗?
use v6;
my $data1 = Buf.new(1, 2, 3);
my Buf $data2;
my $n = $data1.bytes;
for ^$n
{
my $ch = $data1.shift;
$data2.push($ch)
}
Run Code Online (Sandbox Code Playgroud)
我越来越
$ raku bufpush.raku
Cannot resolve caller push(Buf:U: Int:D); none of these signatures matches:
(Buf:D: int $got, *%_)
(Buf:D: Int:D $got, *%_)
(Buf:D: Mu:D $got, *%_)
(Buf:D: Blob:D $buf, *%_)
(Buf:D: **@values, *%_)
in block <unit> at bufpush.raku line 11
Run Code Online (Sandbox Code Playgroud)
Cannot resolve caller push(Buf:U: Int:D); none of these signatures matches:
(Buf:D: int $got, *%_)
(Buf:D: Int:D $got, *%_)
(Buf:D: Mu:D $got, *%_)
(Buf:D: Blob:D $buf, *%_)
(Buf:D: **@values, *%_)
in block <unit> at bufpush.raku line 11
Run Code Online (Sandbox Code Playgroud)
将找到的签名与每个建议的签名进行比较,结果显示近似匹配:
(Buf:D: Int:D $got, *%_)
Run Code Online (Sandbox Code Playgroud)
唯一的区别是签名前面的Buf:DvsBuf:U东西(称为)。invocant marker它指定调用者(可以调用该方法的对象/事物)。它是可选的,默认情况下允许调用对象和类上的方法。大多数情况下,调用者标记用于指定是否只允许在类型对象(例如Blob.allocate)或具体对象(例如Blob.gist)上调用该方法。Buf:D表示已定义Buf对象,Buf:U表示未定义类型Buf对象。
所以从上面我们可以知道代码试图调用push类型对象,所以$data2是未定义的。更改my Buf $data2;为my Buf $data2 .= new;可解决该问题。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |