相关疑难解决方法(0)

如何定义'AT-POS'方法?

AT-POS为类定义了方法并导出了[]运算符.[]但是,当我在该类的实例上使用时,编译器忽略了我定义的运算符.

这是代码:

unit module somelib;

class SomeClass is export {
    method AT-POS(@indices) {
        say "indices are {@indices.perl}"
    }
}

multi postcircumfix:<[ ]> (SomeClass:D $inst, *@indices) is export {
    $inst.AT-POS(@indices)
}
Run Code Online (Sandbox Code Playgroud)
#! /usr/bin/env perl6

use v6.c
use lib ".";
use somelib;

my $inst = SomeClass.new;

$inst[3, 'hi'];

# expected output:
#   indices are 3, 'hi'

# actual output:
#   Type check failed in binding to parameter '@indices';
#   expected Positional but got Int (3)
# …
Run Code Online (Sandbox Code Playgroud)

operator-overloading perl6

8
推荐指数
1
解决办法
110
查看次数

支持 AT-POS 多维下标访问中的任意范围

我如何实现AT-POS以支持多维范围,例如[0;*][*;0]

在下面的实现中,我收到Index out of range错误:

class Foo {
    has @.grid;
    multi method elems { @!grid.elems }
    multi method AT-POS($y, $x) is rw { @!grid[ $y ; $x ] }
    multi method ASSIGN-POS ($y, $x, $new) { @!grid[ $y; $x ] = $new }
    multi method EXISTS-POS($y, $x) { @!grid[ $y; $x ]:exists }
}

my $foo = Foo.new: :grid[ ['a'], ['b', 'c'] ];
say $foo[0;0];         # a
say $foo[0;*].elems;   # Expect 1, …
Run Code Online (Sandbox Code Playgroud)

raku

6
推荐指数
1
解决办法
72
查看次数

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

您可以使用以下命令轻松允许下标访问您自己的类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;
Run Code Online (Sandbox Code Playgroud)

输出:

<a b c d e>
c
<a b c z e>
Run Code Online (Sandbox Code Playgroud)

但我需要二维下标访问.我已经想出如何让这个工作用于阅读,但它在写作时死亡:

class Bar
{
    has @.grid;

    method AT-POS($y, $x) is rw { return-rw @!grid[$y;$x] }
    method Str { '<' …
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
2
解决办法
74
查看次数

标签 统计

perl6 ×2

operator-overloading ×1

raku ×1