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

为什么Perl 6 Str会做位置角色,如何更改[]?

发布时间:2020-12-15 23:26:06 所属栏目:大数据 来源:网络整理
导读:我正在玩一个字符串的位置界面.我知道 How can I slice a string like Python does in Perl 6?,但我很好奇,如果我能让这件事只是为了咯咯笑. 我想出了这个例子.阅读职位很好,但我不知道如何设置多来处理任务: multi postcircumfix:[ ] ( Str:D $s,Int:D $n
我正在玩一个字符串的位置界面.我知道 How can I slice a string like Python does in Perl 6?,但我很好奇,如果我能让这件事只是为了咯咯笑.

我想出了这个例子.阅读职位很好,但我不知道如何设置多来处理任务:

multi postcircumfix:<[ ]> ( Str:D $s,Int:D $n --> Str ) {
    $s.substr: $n,1
    }
multi postcircumfix:<[ ]> ( Str:D $s,Range:D $r --> Str ) {
    $s.substr: $r.min,$r.max - $r.min + 1
    }
multi postcircumfix:<[ ]> ( Str:D $s,List:D $i --> List ) {
    map( { $s.substr: $_,1 },@$i ).list
    }

multi postcircumfix:<[ ]> ( Str:D $s,Int:D $n,*@a --> Str ) is rw {
    put "Calling rw version";
    }


my $string = 'The quick,purple butterfly';

{ # Works
my $single = $string[0];
say $single;
}

{ # Works
my $substring = $string[5..9];
say $substring;
}

{ # Works
my $substring = $string[1,3,5,7];
say $substring;
}

{ # NOPE!
$string[2] = 'Perl';
say $string;
}

最后一个不起作用:

T
uick,(h   u c)
Index out of range. Is: 2,should be in 0..0
  in block <unit> at substring.p6 line 36

Actually thrown at:
  in block <unit> at substring.p6 line 36

不过,我认为它不会起作用.我不知道应该做什么样的签名或特征来做我想做的事情.

为什么[]运算符在Str上工作?

$perl6
> "some string"[0]
some string

这些文档主要暗示[]在执行Positional角色的事情上工作,并且这些事情在列表中就像事物一样.从[] docs in operators开始:

Universal interface for positional access to zero or more elements of a @container,a.k.a. “array indexing operator”.

但是一个Str令人惊讶地发挥了必要的作用,即使它不是@container(据我所知):

> "some string".does( 'Positional' )
True

有没有办法测试某些东西是@container?

有没有办法得到一些东西来列出它的所有角色?

现在,知道字符串可以响应[],我怎样才能找出符合哪个签名?我想知道用于定义我自己的版本的正确签名,以通过[]写入此字符串.

解决方法

实现这一目标的一种方法是扩充Str类,因为你真的只需要覆盖AT-POS方法(Str通常从Any继承):

use MONKEY;
augment class Str {
    method AT-POS($a) {
        self.substr($a,1)
    }
}
say "abcde"[3]     # d
say "abcde"[^3]    # (a b c)

更多信息可以在这里找到:https://docs.perl6.org/language/subscripts#Methods_to_implement_for_positional_subscripting

(编辑:李大同)

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

    推荐文章
      热点阅读