收到:
for $config.IO.slurp.lines <-> $l {
$l .= trim;
...
}
Run Code Online (Sandbox Code Playgroud)
得到这个:
t/01-basic.rakutest ..3/5
Parameter '$l' expects a writable container (variable) as an argument,
but got '# karabiner config file' (Str) as a value without a container.
in sub generate_file at...
Run Code Online (Sandbox Code Playgroud)
$l我已经阅读了有关容器的文档,但除了可能分配给标量变量之外,它没有说明我在这种情况下可以做什么,这似乎很糟糕。有什么方法可以容器化$l吗?
Eli*_*sen 13
问题实际上是.lines不生产容器。因此<->,使用 ,您将绑定到值,而不是容器。有多种方法可以通过按照您的建议进行容器化来解决此问题:
for $config.IO.slurp.lines -> $l is copy {
$l .= trim;
...
}
Run Code Online (Sandbox Code Playgroud)
但只有当您想对 进行更多更改时,这才有意义$l。如果这实际上只是修剪您收到的线路,您可以即时执行此操作:
for $config.IO.slurp.lines>>.trim -> $l {
...
}
Run Code Online (Sandbox Code Playgroud)
或者,如果您需要进行更多预处理$l,请使用.map:
for $config.IO.slurp.lines.map({
.trim.subst("foo","bar",:g)
}) -> $l {
...
}
Run Code Online (Sandbox Code Playgroud)