相关疑难解决方法(0)

对象创建中的解构赋值

与我之前的问题一样,在这个领域我无法判断我对 Raku 语义的理解是否遇到了错误或漏洞。上次竟然是bug,不过怀疑闪电会劈两次!

\n

一般来说,我知道我可以使用看起来很像创建 Pair 的语法(例如f :a(42))或使用看起来很像展平哈希的语法(例如f |%h)将命名参数传递给函数。(请参阅文档中的参数解构)。通常,这两者是等效的,即使对于非标量参数也是如此:

\n
sub f(:@a) { dd @a }\nmy %h = a => [4, 2];\nf :a([4,2]);  # OUTPUT: \xc2\xabArray element = [4, 2]\xc2\xbb\nf |%h;        # OUTPUT: \xc2\xabArray element = [4, 2]\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n

然而,当使用默认构造函数构造对象时.new,这两种形式似乎给出了不同的结果:

\n
class C { has @.a; }\nmy %h = a => [4, 2];\nC.new: :a([4,2];  # OUTPUT: \xc2\xabC.new(a => ([[4, 2]])\xc2\xbb\nC.new: |%h;       # OUTPUT: \xc2\xabC.new(a => [[4, 2],])\xc2\xbb\n
Run Code Online (Sandbox Code Playgroud)\n …

arrays constructor destructuring rakudo raku

9
推荐指数
1
解决办法
236
查看次数

标签 统计

arrays ×1

constructor ×1

destructuring ×1

raku ×1

rakudo ×1