当原始变量具有默认强制时,有没有办法访问混合组件?

jjm*_*elo 4 mixins raku

例如,在这种情况下:

my @list = (2,) but "bar";
put @list.Str «2?»
Run Code Online (Sandbox Code Playgroud)

似乎没有办法访问“bar”组件。我错过了什么吗?同样会发生,例如,Set

my @list = (2,3) but Set(4,5);
put @list.Set; # OUTPUT: «3 2?»
Run Code Online (Sandbox Code Playgroud)

Jon*_*ton 9

赋值是一个复制操作,所以:

my @a = something;
Run Code Online (Sandbox Code Playgroud)

创建一个Arrayin @a,迭代something并将每个元素存储在 中@a。如果改为使用绑定:

my @list := (2,) but "bar";
put @list.Str;
Run Code Online (Sandbox Code Playgroud)

然后将带有 mixin 的列表绑定到符号@list,输出为:

bar
Run Code Online (Sandbox Code Playgroud)

  • 不,它作为一个整体出现在“列表”中。在我们分配的情况下,右侧的“List”仅用于其内容,然后变得不可访问。 (4认同)
  • `$something but "a string"` 是 `$something but role { method Str() { "a string" } }` 的缩写 - 也就是说,它改变了对象强制为 `Str` 的方式。`print` 函数将其参数强制为 `Str`。“put”函数(“print using terminator”的缩写)也可以,因为它是“print”的一种形式。相比之下,“say”调用“gist”方法,如“给我[要点](https://dictionary.cambridge.org/dictionary/english/gist)”。我们所扮演的角色并没有改变这一点。 (3认同)
  • 但这意味着混合会进入第一个元素? (2认同)