perl6 – Perl 6:使用AT-POS进行可写的多维下标访问

perl6 – Perl 6:使用AT-POS进行可写的多维下标访问,第1张

概述您可以使用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 = Fo 您可以使用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>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进行可写的多维下标访问所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1262987.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存