加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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是一种非常迂回的方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读