OLD Perl 6 faq说:"基于Parrot的Perl 6编译器Rakudo允许编译为字节码,并且存在一个小的包装器,它可以将字节码文件和parrot打包成一个可执行文件."
因此,有可能创建一个独立的可执行文件,但我找不到任何文档解释如何解决这个问题,或者它是否仍然可行.所以,我转向你.将Perl 6代码转换为可在未安装Perl 6的系统上运行的独立可执行文件所需的适当咒语集是什么?
在另一个问题中(我如何在与程序相同的文件中声明和使用Perl 6模块?),我有这样的代码:
module Foo {
sub foo ( Int:D $number ) is export {
say "In Foo";
}
}
foo( 137 );
Run Code Online (Sandbox Code Playgroud)
我想检查Foo模块以查看它是否已定义以及可能在其中进行一些调试的内容.既然Foo是一个模块而不是一个类,那么元方法是否有意义?
此外,我认为曾经有一种方法来获取类中的方法列表.我想获得一个模块中的子程序列表.这将是测试我定义正确的东西和Perl 6了解它们的一种方法.在我的Perl 5中,我经常测试我已经定义了一个子程序,因为我有一段时间,我会在模块中选择一个名称,并在测试中略有不同的名称(比如昨晚,我猜,有valid_value和is_value_value) .如果我可以测试foo已定义,我可以在这里进行一些调试.
class Singleton {
# We create a lexical variable in the class block that holds our single instance.
my Singleton $instance = Singleton.bless; # You can add initialization arguments here.
method new {!!!} # Singleton.new dies.
method instance { $instance; }
}
Run Code Online (Sandbox Code Playgroud)
我发现上面的代码实现了Singlelton,我想知道Perl6中的bless和new有什么区别?
my Singleton $instance = Singleton.bless;
my Singleton $instance = Singleton.new;
Run Code Online (Sandbox Code Playgroud) 我对这段代码感到困惑,我显然无法WHAT在字符串连接中调用该方法?
my $object = 'Camelia';
say $object;
say $object.WHAT;
say "^name: The object is a " ~ $object.^name;
say "WHAT: The object is a " ~ $object.WHAT;
Run Code Online (Sandbox Code Playgroud)
输出显示调用^name作品(从元方法元模型:: ClassHOW),但Perl 6的被迷惑.WHAT,仿佛有一个优先问题.
Camelia
(Str)
^name: The object is a Str
Use of uninitialized value of type Str in string context
Any of .^name, .perl, .gist, or .say can stringify undefined things, if needed. in block <unit> at meta_methods.p6 line 7
WHAT: The object is …Run Code Online (Sandbox Code Playgroud) Perl 6有懒惰列表,但它也有无界的Range对象.您应该选择哪一个按整数计算?
并且有两个点的无界范围:
0 .. *
Run Code Online (Sandbox Code Playgroud)
有三个点的Seq(序列):
0 ... *
Run Code Online (Sandbox Code Playgroud)
A Range使用它们的自然顺序生成连续的东西列表.它继承自Iterable,但也是Positional,因此您可以索引范围.您可以检查是否有某些内容Range,但这不是任务的一部分.
Seq只要它知道如何到达下一个元素,A 就可以生成你喜欢的任何东西.它继承自Iterable,还有PositionalBindFailover,它Positional通过缓存和列表转换来伪造东西.如果你只是从一个元素转移到另一个元素,我认为这不是什么大问题.
我在这上面来回走动.目前我在想它的范围.
我最近决定看看Perl,当面对Perl 5 vs 6时,由于它的成熟和大量的支持,我选择了5.
然而,Perl 6的一个真正引起我兴趣的是grammar关键字,允许用户定义一种可用于解析复杂文本的语言语法.在其他语言中,通常需要外部库或手动解析实现.
既然我已经确定了Perl 5,那么Perl 5中的Perl 6 grammar关键字(或构建语法的其他功能)是否有任何粗略的等价,内置或其他?
我在Perl 6中看到以下代码:
await do for @files -> $file {
start {
#do something ... }
}
Run Code Online (Sandbox Code Playgroud)
它以异步模式运行.为什么上面的代码需要do?doPerl 6 的目的是什么?有人可以详细解释上面的代码吗?
还有一个选项可以写这样的东西:
for @files -> $file {
start {
#do something ... }
}
Run Code Online (Sandbox Code Playgroud)
并等待承诺履行的代码?
我正在玩一个带有多个开关的命令行程序的Perl 6实现.签名MAIN非常复杂,有点混乱.我想知道是否有办法在其他地方定义签名并告诉子程序使用什么:
# possibly big and messy signature
my $sig;
BEGIN { $sig = :( Int $n, Int $m ) };
multi MAIN ( $sig ) {
put "Got $n and $m";
}
Run Code Online (Sandbox Code Playgroud)
MAIN即使在MAIN编译之前设置了签名,也看不到签名中的变量:
===SORRY!=== Error while compiling /Users/brian/Desktop/signature.p6
Variable '$n' is not declared
at /Users/brian/Desktop/signature.p6:7
Run Code Online (Sandbox Code Playgroud)
我认为在编译时生成方法并根据各种因素选择签名可能很方便.
我还在学习Perl 6.请原谅我的无知.我正在阅读Operators页面,我在表的开头发现了一些不熟悉的结构:
A Level Examples
N Terms 42 3.14 "eek" qq["foo"] $x :!verbose @$array
Run Code Online (Sandbox Code Playgroud)
我重新读取类Array和类Scalar但我无法@$xyz在这些部分中找到构造.做什么:!和@$意味着什么?有没有一个方便的地方收集和解释所有这些象征性的结构?
非常感谢你 !!
法线贴图将函数应用于列表元素,并生成结果列表的元素.例如,如果列表是(1, 2, 3,)并映射了square函数,则会得到一个新列表(1, 4, 9,).
有没有办法映射列表的一组顺序元素?例如,如果列表是<8 2 7 2 6 9 4 9 6 1>,我想计算列表中每2个元素的总和<10 9 9 8 15 13 13 15 7>?
我当然可以写一个例程来遍历列表.但我正在寻找一种更简单的方法,如减少运算符或像聚集/采取.