class Foo{ has @.grID; method AT-POS($x) is rw { return-rw @!grID[$x] } method Str { '<' ~ @!grID.join(' ') ~ '>' } method gist { self.Str }}my $foo = Foo.new(:grID(<a b c d e>));say $foo;say $foo[2];$foo[3] = 'z';say $foo;
输出:
<a b c d e>c<a b c z e>
但我需要二维下标访问.我已经想出如何使这个工作用于阅读,但它在写作时死亡:
class bar{ has @.grID; method AT-POS($y,$x) is rw { return-rw @!grID[$y;$x] } method Str { '<' ~ @!grID».join(' ').join("\n ") ~ '>' } method gist { self.Str }}my $bar = bar.new(:grID(<a b c d e>,<f g h i j>,<k l m n o>));say $bar;say $bar[1;2];$bar[2;3] = 'z';say $bar;
输出:
<a b c d e f g h i j k l m n o>hToo few positionals passed; expected 3 arguments but got 2 in method AT-POS at ./p6subscript line 25 in block <unit> at ./p6subscript line 33
有没有办法让这项工作?
解决方法 我的解决方案是(假设我们只有2个维度):class bar { has @.grID; method TWEAK() { $_ .= Array for @!grID } method AT-POS(|c) is raw { @!grID.AT-POS(|c) } method Str { '<' ~ @!grID».join(' ').join("\n ") ~ '>' } method gist { self.Str }}
TWEAK将转换给阵列的任何列表,如果它们还没有.只需要AT-POS上的原始数据:return-rw是一种非常迂回的方式.
总结以上是内存溢出为你收集整理的perl6 – Perl 6:使用AT-POS进行可写的多维下标访问全部内容,希望文章能够帮你解决perl6 – Perl 6:使用AT-POS进行可写的多维下标访问所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)