perl6 – Perl 6:使用AT-POS进行可写的多维下标访问
发布时间:2020-12-15 23:21:19 所属栏目:大数据 来源:网络整理
导读:您可以使用AT-POS轻松允许下标访问您自己的类: 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
您可以使用AT-POS轻松允许下标访问您自己的类:
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> h Too 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是一种非常迂回的方式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |