我正在浏览例程中的Perl 6文档shift并看到了这个片段:
定义为:
Run Code Online (Sandbox Code Playgroud)multi sub shift(Array:D ) multi method shift(Array:D:)
我知道:D指的Array就是defined不Any和Nil,但有什么:D:?搜索起来非常困难.
类型签名文档的这一部分包含更多语法示例,但没有(据我所知)解释它.
是否有一种简单的方法可以将定义常量的值用作Perl6中的散列/对键?
例如 :
constant KEY = "a string";
my %h = ( KEY => "a value" );
Run Code Online (Sandbox Code Playgroud)
这将创建"KEY"而不是"字符串"的键.
我可以 :
my %h = ( "{KEY}" => "a value" );
Run Code Online (Sandbox Code Playgroud)
但这似乎有点笨重.我想知道是否有更好的方法?
我有这个工作:
my %pnt = %( cardinal => <N E S W>,
ordinal => <N NE E SE S SW W NW>,
half-winds => <N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW>,
);
Run Code Online (Sandbox Code Playgroud)
我认为有可能以编程方式创建半风阵列。
然而,我可怜的尝试似乎更加冗长:
my @cards = <N E S W>;
my @odds = <NE SE SW NW>;
my @ords = ( @cards Z @odds ).flat;
my @mids = ( ( @cards Z~ @odds ) Z ( @cards.rotate(1) Z~ @odds ) ).flat; …Run Code Online (Sandbox Code Playgroud) 有人可以提供从Perl 6开始的材料链接吗?还有人可以指出已经用Perl 6开发的真实应用程序吗?
perl6/Rakudo是否有相当于perl5 __DATA__或__END__部分的东西?
该int类有一个方法is_prime,所以我想,只是笑声,我想一些其他方法增加Int了一些做数论的东西我的爱好项目.
我以为我可以这样做:
class Int {
method is-even (Int:D $number ) returns Bool:D {
return False if $number % 2;
return True;
}
}
say 137.is-even;
Run Code Online (Sandbox Code Playgroud)
但这不起作用:
===SORRY!===
P6opaque: must compose before allocating
Run Code Online (Sandbox Code Playgroud)
我不知道这是否意味着我不能这样做或者我做错了.
我可以很容易地创建一个继承自的新类Int,但这不是我感兴趣的:
class MyInt is Int {
method is-even () returns Bool:D {
return False if self % 2;
return True;
}
}
my $n = MyInt.new(138);
say $n.is-even;
Run Code Online (Sandbox Code Playgroud)
我不是在寻找变通方法或替代解决方案.
有人可以解释为什么这会访问Perl 6中的最后一个元素
@array[*-1]
Run Code Online (Sandbox Code Playgroud)
为什么我们需要星号*?
做这样的事情不是更合乎逻辑:
@array[-1]
Run Code Online (Sandbox Code Playgroud) Clickbaity标题,但它太多了,不能放弃.我有这个运算符,我希望是正确的关联:
sub infix:<?> ( Int:D \n, Int:D \m --> Int:D )
is assoc<right>
is equiv(&infix:<**>)
{ n ** m }
put "2**2**2**2 = ", 2**2**2**2;
put "2?2?2?2 = ", 2?2?2?2;
put "2? (2? (2?2) ) = ", 2? (2? (2?2) );
Run Code Online (Sandbox Code Playgroud)
这是不正确的联想:
2**2**2**2 = 65536
2?2?2?2 = 256
2? (2? (2?2) ) = 65536
Run Code Online (Sandbox Code Playgroud)
我做得不对(咳咳)?
Perl 6中同时存在占位符变量和主题变量。例如,以下两个语句相同
say ( $_ * 2 for 3, 9 ); # use topic variables
say ( { $^i * 2 } for 3, 9 ); # use placeholder variables
Run Code Online (Sandbox Code Playgroud)
在我看来,从主题变量中获得的唯一好处就是节省了一些键盘笔触。
我的问题是:是否存在用例,其中主题变量比占位符变量方便得多?
有时我会在Perl 6 REPL上开始编写方法调用链,例如:
".".IO.dir.grep(...).map(...).
Run Code Online (Sandbox Code Playgroud)
...然后我意识到我要对最终列表进行的操作是将每个元素打印在自己的行上。我希望序列具有某种each方法,因此我可以使用结束链.each(*.say),但是没有找到这样的方法。取而代之的是,我必须返回到该行的开头并前置.say for。感觉好像打乱了我的思想。
这是一个小麻烦,但是却让我感到震惊,我不知道我是否缺少一些简单的选择。我唯一想到的是».sayand .join("\n").say,但是前者可以对元素进行无序操作(如果我理解正确的话),而后者可以构造一个字符串,该字符串可能会很大,具体取决于输入列表。