我在 中安装了 Perl 6 ~/.rakudo-star/rakudo-star-2018.04,使用 LoneStar。当zef安装了一个模块,它被安装到Rakudo Perl 6的目录的子目录。这里有一个名为 的目录perl6/site/resources,它似乎包含所有已安装的文件。如何使用 Perl 6 找出哪个模块包含在哪个文件中?
我想重用<< ... >>字符串上的解析逻辑来返回一个列表。比如说,我已经在一个变量中拥有了字符串$input,如何在不使用的情况下解析它EVAL(例如,EVAL "<< $input >>")?
一个更普遍的问题可能是:我如何重用各种引用构造(例如,qqww:v:!c)使用的任何解析逻辑?
我正在尝试链接libzip到 Raku,它使用了一个 voidstruct或一个没有主体的结构,如下所示:
struct zip;
typedef struct zip zip_t;
Run Code Online (Sandbox Code Playgroud)
我以同样的方式在我的 Raku 程序中声明它:
class zip_t is repr('CStruct'){};
Run Code Online (Sandbox Code Playgroud)
这失败了:
Class zip_t has no attributes, which is illegal with the CStruct representation.
Run Code Online (Sandbox Code Playgroud)
我发现该错误的唯一参考是在 MyHTML中的这个未解决的问题中。这可能使它成为一种回归,但我真的不确定。任何的想法?
我试图将文件名中的三个字母与 1000Genomes 项目匹配,并且只匹配三个字母,来自像ethnicity_lists/PEL.txt我应该只得到PEL. 字符串的其余部分无关紧要。
my $p1-label = @populations[$p1-index].match(/^ethnicity_lists\/(<[A..Y]>)**3\.txt$/);
Run Code Online (Sandbox Code Playgroud)
问题是$p1-label包括捕获组之外的整个字符串。
我已经把括号放在了<[A..Y]>强调我只想要那个组。
浏览https://docs.perl6.org/routine/match
我尝试尽可能具体以防止任何可能的错误,这就是我包含整个字符串的原因。
如果我进行 Perl5 风格的匹配:
if @populations[$p1-index] ~~ /^ethnicity_lists\/(<[A..Y]>)**3\.txt$/ {
put $0.join(''); # strange that this outputs an array instead of a string
}
Run Code Online (Sandbox Code Playgroud)
我已经尝试了该match方法的所有副词,但没有一个完成必要的工作。
如何将match方法仅限于正则表达式中的捕获组?
$ raku -v 这是基于 MoarVM 版本 2019.07.1 构建的 Rakudo 版本 2019.07.1
以下是在 Raku REPL 上完成的。我在这里做错了什么?如何为 CArray[WCHAR] 赋值?
我希望 $lpData[0] 为 0xABCD,$lpData[1] 为 0xEF12。
> use NativeCall;
Nil
> constant WCHAR := uint16;
(uint16)
> my $ValueData = 0xABCDEF12;
2882400018
> my CArray[WCHAR] $lpData;
(CArray[uint16])
> $lpData[ 0 ] = ( $ValueData +& 0xFFFF0000 ) +> 0x10;
Type check failed in assignment to $lpData; expected NativeCall::Types::CArray[uint16] but got Array ($[])
in block <unit> at <unknown file> line 1
> $lpData[ 1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在这样的散列的键或值上使用any或none:
my %w=(a => 1, b => 2);
say %w.keys; # works
say so 'a' == %w.keys.any; # doesn't work
Run Code Online (Sandbox Code Playgroud)
我已经检查了 Raku 文档的哈希和地图部分,但无法解决这个问题。如何解决?谢谢。
我已经按照 SO 问题如何在 Perl 6 中设置参数化类的答案中的 说明进行操作?. 但是,我遇到了一些软障碍。我正在尝试使用类型捕获键入内部类的属性并收到以下错误:
Died with X::TypeCheck::Assignment
in submethod BUILDALL at ...
in method insert at ...
in block <unit> at ...
Run Code Online (Sandbox Code Playgroud)
在下面的示例中,我输入了 classBinaryNode的$.item属性(with T),但这样做会导致上述错误:
class BinarySearchTree {
my role BTSImpl[::T] {
my class BinaryNode is rw {
has T $.item;
has BinaryNode $.left;
has BinaryNode $.right;
}
method create-node( T $x ) {
BinaryNode.new(item => $x)
}
}
method ^parameterize(Mu:U \this, Mu \T) {
my $type := …Run Code Online (Sandbox Code Playgroud) 我想连续打印偶数,但我不能。
use Terminal::ANSIColor;
# Wanna print even numbers in red
for <1 2 3 4>
{ $_ %2 == 0 ?? say color('red'),$_,color('reset') !! say $_ }
Run Code Online (Sandbox Code Playgroud)
printf 似乎不适用于Terminal::ANSIColor指令,put也不起作用。
是否有任何开关可以say使其在没有换行符的情况下打印?如何Terminal::ANSIColor连续打印那些 格式化的部分?
常见问题解答:在 Raku 中,如何解析String并获得Number?例如:
xxx("42"); # 42 (Int)
xxx("0x42"); # 66 (Int)
xxx("42.123456789123456789"); # 42.123456789123456789 (Rat)
xxx("42.4e2"); # 4240 (Rat)
xxx("42.4e-2"); # 0.424 (Rat)
Run Code Online (Sandbox Code Playgroud) 我经常需要将数据从一种类型转换为另一种类型,然后进行比较。一些运算符会先转换为特定类型,这种转换可能会导致效率损失。例如,我可能有
my $a, $b = 0, "foo"; # initial value
$a = (3,4,5).Set; # re-assign value
$b = open "dataFile"; # re-assign value
if $a eq $b { say "okay"; } # convert to string
if $a == 5 { say "yes"; } # convert to number
if $a == $b {} # error, Cannot resolve caller Numeric(IO::Handle:D: );
Run Code Online (Sandbox Code Playgroud)
运算符“eq”和“==”将首先将数据转换为可消化的类型,这可能会减慢速度。如果无法提前知道要比较的数据,运算符“eqv”和“===”是否会跳过转换数据类型并提高效率(即,您完全不知道将要获得什么)?