小编Tyi*_*yil的帖子

如何在Raku中实施

在Perl中Moo,您可以使用实现子around,这些子将包装类中的其他方法。

around INSERT => sub {
    my $orig = shift;
    my $self = shift;

    print "Before the original sub\n";
    my $rv  = $orig->($self, @_);
    print "After the original sub\n";
};
Run Code Online (Sandbox Code Playgroud)

如何在Raku中实现此行为,最好使用a role

oop raku

12
推荐指数
3
解决办法
164
查看次数

如何制作一个范围与...,但倒计时

我希望有一个从5到1的循环.我知道我可以轻松地与..运算符相反:

for 1..5 { .print }
12345
Run Code Online (Sandbox Code Playgroud)

但是当使用..运算符并反转边时,它似乎不会生成for可以使用的有效范围:

for 5..1 { .print }
Nil
Run Code Online (Sandbox Code Playgroud)

我知道我可以reverse在Range对象上使用该方法:

for (1..5).reverse { .print }
54321
Run Code Online (Sandbox Code Playgroud)

但是,我希望..运营商能够以一定的方式在1次呼叫中生成数字列表.我的问题是,如何创建一个使用..运算符倒计时的Range ?

perl6 raku

11
推荐指数
1
解决办法
173
查看次数

如何在MAIN中要求一个或多个参数

现在,我有一个MAIN可以接受一个或多个字符串参数的子.但我使用两个单独的参数MAIN来做到这一点:

sub MAIN (
    Str:D $file,
    *@files,
) {
    @files.prepend: $file;

    # Rest of the program
}
Run Code Online (Sandbox Code Playgroud)

现在我想知道是否有更惯用的方法来实现这一点,因为我目前的解决方案感觉有点笨重,而不是非常Perly.

perl6 raku

9
推荐指数
2
解决办法
191
查看次数

不要使用p6doc显示声明符块

我写了一个小的示例文件来了解有关Perl 6 POD的更多信息,我正在使用p6docPOD文档渲染一个小的手册页.但是,p6doc也尝试解析POD文档之外的声明器块.这在输出中看起来不是特别好.有没有办法在使用时忽略声明器块p6doc

我正在使用的代码示例是:

#! /usr/bin/env perl6

use v6.c;

#| Greet people on the command line.
sub MAIN (
    #| A name to greet.
    $names,

    #| Optional. Additional names to greet.
    *@names,
) {
    *
}

=begin pod

=NAME    greeter
=AUTHOR  Patrick Spek
=VERSION 0.0.1

The greeter application greets someone via a terminal. At least 1 name is
required, but multiple names can be given to greet many people in one go.
=end pod …
Run Code Online (Sandbox Code Playgroud)

documentation perl6

9
推荐指数
1
解决办法
125
查看次数

如何使用包含where的抽象多方法?

我正在研究Perl 6模块,Pod::To::Anything以便创建一个简单的界面来创建Perl 6 Pod格式化程序.我正在将渲染分成多个render方法,每个方法都必须处理Pod规范的给定部分.

为了确保完成基于此类的Pod格式化程序,我想添加涵盖所有可能的Pod对象的抽象方法.但是,这要求我where多次使用一个子句:

multi method render (Pod::Block::Named:D $ where *.name eq "NAME" --> Str) { … }
Run Code Online (Sandbox Code Playgroud)

我试图按如下方式实现它:

multi method render (Pod::Block::Named:D $pod where *.name eq "NAME" --> Str) { ".TH {self.pod-contents($pod)}\n" }
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试运行该程序时,Perl 6抱怨一种方法没有实现:

===SORRY!=== Error while compiling /home/tyil/projects/personal/perl6-Pod-To-Man/lib/Pod/To/Man.pm6 (Pod::To::Man)
Multi method 'render' with signature :(Pod::To::Man $: Pod::Block::Named:D $ where { ... }, *%_ --> Str) must be implemented by Pod::To::Man because it is required by a role at …
Run Code Online (Sandbox Code Playgroud)

oop abstract-class where abstract perl6

8
推荐指数
1
解决办法
158
查看次数

zef是否识别并处理预发布模块?

我有一个模块App::Assixt,我最近做了一个相对较大的变化.我当然在我的本地系统上对它进行了测试,但在将其称为"稳定版本"之前,我想先进行一些现场测试.

有没有办法将此版本"标记"为"alpha"或"release-candidate",所以此版本只会由选择使用不稳定/测试版本的人安装?

module perl6 zef

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

在具有`MAIN`定义的模块上使用`use-ok`进行测试

我正在编写一个新的Perl 6项目,希望能够测试所有部件是否use正确.为此,我正在使用模块中的use-ok子程序Test.我正在尝试使用以下代码轻松测试所有模块文件:

"META6.json".IO.slurp.&from-json<provides>
.grep(*.value.starts-with("lib")).Hash.keys
.map({ use-ok $_ })
Run Code Online (Sandbox Code Playgroud)

我的问题是有一些文件包含MAIN子程序的定义.从运行时看到的输出prove -e 'perl6 -Ilib' t,看起来其中一个文件正在MAIN执行,然后测试停止.

我想测试这些文件是否可以use正确运行,而不是实际运行其中MAIN定义的subs.我该怎么做?

testing perl6

8
推荐指数
1
解决办法
135
查看次数

当通过`for`循环时,数组保持数组

depends从一个循环遍历数组META6.json.我加载了一个Hash使用JSON::Fast.for但是,当我使用循环遍历它时,它只通过循环一次,并且该项是相同的数组:

use JSON::Fast;
my %meta = from-json(slurp("META6.json"));

for %meta<depends> -> $dependency {
    dd $dependency;
}
Run Code Online (Sandbox Code Playgroud)

这段代码返回

Array $dependency = $["Config::Parser::toml:ver<1.0.1+>", "Config:api<1>:ver<1.3.5+>", "Dist::Helper:ver<0.21.0+>", "Hash::Merge", "Terminal::Getpass:ver<0.0.5+>", "zef"]
Run Code Online (Sandbox Code Playgroud)

我希望它能循环%meta<depends>6次,每次迭代都会从该数组中获取不同的元素.

为了更好地衡量,这是dd %meta<depends>示例的输出:

Array %meta = $["Config::Parser::toml:ver<1.0.1+>", "Config:api<1>:ver<1.3.5+>", "Dist::Helper:ver<0.21.0+>", "Hash::Merge", "Terminal::Getpass:ver<0.0.5+>", "zef"]
Run Code Online (Sandbox Code Playgroud)

为什么循环不按我预期的方式循环?

编辑:我正在使用最新的Rakudo Star:

This is Rakudo Star version 2018.04.1 built on MoarVM version 2018.04.1
implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud)

perl6

7
推荐指数
2
解决办法
138
查看次数

从另一个Perl 6文件访问POD

Perl 6的POD文档对使用访问当前文件的POD文档一节$=pod.没有关于访问另一个文件的POD文档的信息.

如何在不改变当前文件的情况下访问另一个文件的POD结构$=pod

perl6 pod6

6
推荐指数
1
解决办法
159
查看次数

不打电话给其他候选人打电话?什么是"其他候选人"?是否已经耗尽了其他候选人的名单?该清单可用吗?

我正在尝试解决这个问题,这实际上是由另一个callwithand 的不同行为相关的stackoverflow问题引发的samewith.后者似乎有明确的定义,然而,它并不是那么清楚callwith.

看看这个例子:

proto how-many(|) {*}

multi sub how-many( Pair $a, Pair $b ) {
    say "Int $a and $b";
    return "There are $a and $b"

}
multi sub how-many( $a, $b ) {
    say "Not int $a and $b";
    my $calling = callwith( 1 => $a, 2 => $b );
    return $calling;
}

say how-many( "little piggie","littler piggie" );
Run Code Online (Sandbox Code Playgroud)

根据文档,callwith应该调用下一个匹配的候选人.但是,这是输出:

Not int little piggie and …
Run Code Online (Sandbox Code Playgroud)

perl6 dispatch

6
推荐指数
1
解决办法
84
查看次数

标签 统计

perl6 ×9

raku ×3

oop ×2

abstract ×1

abstract-class ×1

dispatch ×1

documentation ×1

module ×1

pod6 ×1

testing ×1

where ×1

zef ×1