Perl6/Rakudo是否已经存在像perl5的"perldoc -f function_name"这样的内置函数,它为我提供了一个简短快速的使用指令?
在使用用户定义的变量时,有没有"@" - sigil我不能做的事情?
#!perl6
use v6;
my $list = <a b c d e f>;
my @list = <a b c d e f>;
$list.list.perl.say;
@list.perl.say;
$list[2..4].say;
@list[2..4].say;
$list.elems.say;
@list.elems.say;
$list.end.say;
@list.end.say;
say 'OK' if $list ~~ /^c$/;
say 'OK' if @list ~~ /^c$/;
Run Code Online (Sandbox Code Playgroud) 在Perl 6中,在for-style中声明的变量loop位于外部作用域中.这有效并且有记录.
loop ( my $n = 0; $n < 3; $n++ ) {
put $n;
}
say "Outside: $n";
Run Code Online (Sandbox Code Playgroud)
的$n是该块的外部可见:
0
1
2
Outside: 3
Run Code Online (Sandbox Code Playgroud)
这里是否存在激励技巧,使其与Perl 6的祖先所期望的不同?我没有在设计文档中看到这一点(但尝试在某个时候搜索"循环").我无法想出一个可以让事情变得更容易的例子.
在Perl 5中,同样的事情是严格的错误:
use v5.10;
use strict;
for ( my $n = 0; $n < 3; $n++ ) {
put $n;
}
say "Outside: $n"; # Nope!
Run Code Online (Sandbox Code Playgroud)
而且,在C(那些让你这样做),这是一个类似的错误:
#include <stdio.h>
int main () {
for( int a = 10; a < 20; a = a + 1 …Run Code Online (Sandbox Code Playgroud) 如果您知道其索引,则可以使用Perl 6中的副词:delete删除数组元素:
my @letters = <a b c>; @letters[0]:delete; say @letters
# OUTPUT: «[(Any) b c]?»
Run Code Online (Sandbox Code Playgroud)
但是,如果您不知道索引,则无法执行此操作:
my @letters = <a b c>; $_:delete if $elem eq 'a' for @letters
#ERROR! ? Variable '$_:delete' is not declared
Run Code Online (Sandbox Code Playgroud)
如果声明循环变量is rw仍然是同一个问题:
my @letters = <a b c>; for @letters -> $l is rw { $l:delete if $l eq 'a' }; say @letters
#ERROR! ? Variable '$l:delete' is not declared
Run Code Online (Sandbox Code Playgroud)
似乎没有其他方法可以删除数组元素.该等效Perl 5的delete点,实际上,该副词.你可以使用,splice但你必须再次知道索引.实现似乎是这个函数, …
我想创建一个Perl 6模块,它将一个LEAVE移相器"导出" 到use放置语句的作用域.我还没有办法做到这一点.
我认为这需要在EXPORT子内部完成,但如何?EXPORTsub 的默认功能是返回一个Map名称=>要导出的事物的对象映射.据我所知,没有办法反省外部范围.或者我错过了什么?
声明原型时,可以在多方法/子代码周围附加其他代码。举一个愚蠢的例子:
proto sub foo(|) { 'Camelia says “' ~ {*} ~ '!”' }
multi sub foo(1) { "hi" }
multi sub foo($) { "bye" }
say foo(1) # Camelia says “hi!”
Run Code Online (Sandbox Code Playgroud)
我还没有遇到任何时间(还)在那里我已经感到的巨大有用的,但在另一面,我已经在那里正则表达式中遇到一些/语法的世界里,我偶尔发现自己重复自己在所有的原令牌-这并不是说我不能转移到单独的令牌中,而是增加了层次结构和操作的额外层。比较假设
grammar Bar {
token TOP { <meta>* }
token metastart { '#' }
proto token meta { <metastart> {*} }
token meta:name { ( \w* ) }
token meta:date { (\d**6) }
}
Run Code Online (Sandbox Code Playgroud)
在那里他们只是操作方法除了需要TOP将meta:name与meta:date以
grammar Bar {
token TOP { …Run Code Online (Sandbox Code Playgroud) 我想知道.^Perl 6中sigil的含义。
put "\"10\" : ", "10".^name;
say "Type : ", (10.Str).^name;
say $object.^parents;
say $object.^methods;
Run Code Online (Sandbox Code Playgroud)
在此代码段中,这.^是什么意思?是name父类的方法还是属性?还是有不同的含义?
您好我正在尝试在https://docs.perl6.org/language/operators#Hyper_operators中使用分配超级运算符Perl 6
?my (@one, @two) «=» (<1 2 3>,<4 5 6>);
say @one;
say @two;
# Prints nothing (empty array)
# Expected behaviour:
@one=<1 2 3>;
@two=<4 5 6>;
say @one;
say @two;
# Prints [1 2 3] and [4 5 6]
Run Code Online (Sandbox Code Playgroud)
如何使分配超级操作员正确运行?谢谢。
我想将多维数组克隆为@a数组@b。
我以最直观的方式进行了操作,并提出了以下建议:
my @a = [0, 0, 0], [0, 0, 0], [0, 0, 0];
my @b = @a.clone;
@a[0][1] = 1;
@b[1][0] = 1;
say '@a : ' ~ @a.gist;
say '@b : ' ~ @b.gist;
Run Code Online (Sandbox Code Playgroud)
打印出来的是:
@a : [[0 1 0] [1 0 0] [0 0 0]]
@b : [[0 1 0] [1 0 0] [0 0 0]]
Run Code Online (Sandbox Code Playgroud)
那意味着两个数组@a 和@b 是绑定的?
问题: