标签: raku

如何计算模块的 dist 哈希

我在 中安装了 Perl 6 ~/.rakudo-star/rakudo-star-2018.04,使用 LoneStar。当zef安装了一个模块,它被安装到Rakudo Perl 6的目录的子目录。这里有一个名为 的目录perl6/site/resources,它似乎包含所有已安装的文件。如何使用 Perl 6 找出哪个模块包含在哪个文件中?

zef raku

4
推荐指数
1
解决办法
191
查看次数

是否可以解析一个字符串,就好像它在 Raku 中被 << 和 >> 包围一样?

我想重用<< ... >>字符串上的解析逻辑来返回一个列表。比如说,我已经在一个变量中拥有了字符串$input,如何在不使用的情况下解析它EVAL(例如,EVAL "<< $input >>")?

一个更普遍的问题可能是:我如何重用各种引用构造(例如,qqww:v:!c)使用的任何解析逻辑?

raku

4
推荐指数
1
解决办法
117
查看次数

通过 NativeCall 在 Raku 中使用 void 结构

我正在尝试链接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中的这个未解决的问题中。这可能使它成为一种回归,但我真的不确定。任何的想法?

rakudo nativecall raku

4
推荐指数
1
解决办法
91
查看次数

Raku/Perl6:如何限制匹配方法以捕获组?

我试图将文件名中的三个字母与 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方法仅限于正则表达式中的捕获组?

regex raku

4
推荐指数
3
解决办法
137
查看次数

Raku:如何为 CArray[WCHAR] 赋值?

$ 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)

nativecall raku

4
推荐指数
1
解决办法
90
查看次数

在 Raku 中对哈希键和值使用 any 或 none

我正在尝试在这样的散列的键或值上使用anynone

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 文档的哈希和地图部分,但无法解决这个问题。如何解决?谢谢。

hash raku

4
推荐指数
1
解决办法
122
查看次数

使用捕获的类型来键入类的属性

我已经按照 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)

metaprogramming parametric-polymorphism raku

4
推荐指数
1
解决办法
99
查看次数

在 Raku 中没有换行符

我想连续打印偶数,但我不能。

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

4
推荐指数
1
解决办法
188
查看次数

从字符串解析并转换为浮点数、整数 (Raku)

常见问题解答:在 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)

raku

4
推荐指数
2
解决办法
472
查看次数

比较任意两项的最有效运算符是什么?

我经常需要将数据从一种类型转换为另一种类型,然后进行比较。一些运算符会先转换为特定类型,这种转换可能会导致效率损失。例如,我可能有

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”和“===”是否会跳过转换数据类型并提高效率(即,您完全不知道将要获得什么)?

comparison type-conversion raku

4
推荐指数
2
解决办法
144
查看次数