标签: raku

如何按原始顺序从超级运算符中获取元素?

我想将字符串拆分为单词并将每个单词打印在单独的行上,因此我尝试了以下操作:

"foo bar baz".words>>.say
Run Code Online (Sandbox Code Playgroud)

然而,结果并不顺利:

baz
foo
bar
Run Code Online (Sandbox Code Playgroud)

这有什么问题?

raku

3
推荐指数
1
解决办法
100
查看次数

如何在语法中引用先前匹配的项目?

我正在尝试解析 BibTeX 作者字段,并将其拆分为单独的作者。这将帮助我重写每个作者的姓名首字母。这是一个最小的例子:

use v6;

my $str = '{Rockhold, Mark L and Yarwood, RR and Selker, John S}';

grammar BibTexAuthor {
    token TOP {
        <all-text> 
    }
    token all-text {
        '{' <authors> '}' 
    }
    token authors { 
        [<author> [' and ' || <?before '}'>]]+
    }
    token author {
        [<-[\s}]> || [' ' <!before 'and '>]]+
    }
}

class BibTexAuthor-actions {
    method TOP($/) {
        say $/;
        print "First author = ";
        say $<author>.made[0];
        make $/.Str;
    }
    method all-text($/) {
        make $/.Str;
    } …
Run Code Online (Sandbox Code Playgroud)

grammar raku

3
推荐指数
1
解决办法
131
查看次数

Perl 6 one-liner 打印文件的唯一行

我发现这个非常有用的单行,它可以工作,但我无法理解它是如何设法在文件行中循环两次。

perl6 -ne 'state %l; .say if ++%l{$_} == 1' input-file.txt
Run Code Online (Sandbox Code Playgroud)

raku

3
推荐指数
1
解决办法
248
查看次数

将 raku 的 `dir` 函数导入 Perl

我已经学习 perl6/raku 一段时间了,我真的很喜欢这个dir例程https://docs.perl6.org/routine/dir。它非常方便且易于使用。

有什么方法可以导入/反向移植dir到 Perl 中吗?我无法通过互联网搜索获得任何结果。

perl raku

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

类型强制绑定

我正在尝试在签名中使用类型强制。

如何修复该my Chars(Str) @a := 'hello';行以使此代码正常工作?

class Chars is Array {
        submethod new(Str:D $s) {
                nextwith(|$s.comb);
        }
}

use MONKEY-TYPING;
augment class Str {
    method Chars { Chars.new(self) }
}


say Chars.new("hello").raku;
say "hello".Chars.raku;

my Chars(Str) @a := 'hello';

@a.raku.say;
Run Code Online (Sandbox Code Playgroud)

raku

3
推荐指数
1
解决办法
76
查看次数

“Rat”类型的调用者没有这种方法“AngleCosine”

我正在尝试编写一个测试方法来打印以度数给定的角度的余弦值。

我最终想要的是能够解决以下问题

say 45.AngleCosine;
Run Code Online (Sandbox Code Playgroud)

没有 .new 的东西,比如

say .7.cos;
Run Code Online (Sandbox Code Playgroud)

我如何放弃 .new 的东西?

这是我到目前为止:

   class Angle {
       has Numeric $.degrees;

       method AngleCosine( $debug = False )  {
          my Str     $SubName = &?ROUTINE.name;
          my Numeric $radians = self.degrees * ? / 180;
          my Numeric $cosine  = $radians.cos;

          if $debug  {
             print "$SubName debugging:\n";
             print "   self    = <" ~ self.degrees ~ ">\n";
             print "   radians = <$radians>\n";
             print "   Cosine of " ~ self.degrees ~  " degrees is <" ~ $cosine ~ …
Run Code Online (Sandbox Code Playgroud)

raku

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

Raku 提供了哪些并发机制以及如何对其进行评估?

我是一名学生,目前正在撰写有关 Raku 的论文,为此我决定评估 Raku (Perl 6) 在处理高并发时是否是一种好语言。

除了官网,我还没有找到任何关于 Raku 并发的论文。另外,我不知道如何评估 Raku 的并发性(例如,我应该使用什么程序,应该将哪种语言与 Raku 进行比较等等)。

Raku 提供了哪些并发机制?这些记录在哪里?如何评估它们的功能和性能?

concurrency raku

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

这个循环还有哪些其他方法可以重写?

得到这个简单的循环:

use Config::Simple:from<Perl5>;

my $cfg = Config::Simple.new(syntax => 'ini');


%config{'short_name'} = 'blah';
for %config.kv -> $k, $v {
    $cfg.param("%config{'short_name'}.$k", $v);
}
Run Code Online (Sandbox Code Playgroud)

工作正常。但我想更熟悉实现相同目标的其他方法,即使只是为了轻松地阅读其他人的代码。另外,循环似乎是“旧”学校的做事方式,而不是很“像 Raku”,我需要更舒适地以更高级的方式使用函数。

不管怎样,为了伸展我的新 Raku 肌肉,我想出了这句话作为替代方案:

map(-> $k, $v { $cfg.param("%config{'short_name'}.$k", $v) }, %config.kv);
Run Code Online (Sandbox Code Playgroud)

它的可读性较差(至少对于我未经训练的眼睛来说),但它有效。

我的预感是有一些好方法可以使这段代码更加简洁和可读。有兴趣看看我是否是对的。

raku

3
推荐指数
1
解决办法
139
查看次数

解决我的 Str 子类中的“无法修改不可变”问题?

我有这个类的子类Str

use Vimwiki::File::TextProcessingClasses;
unit class Vimwiki::File::ContentStr is Str;

method new(Str:D $string) {
    self.Str::new(value => $string);
}

# this method fails
method capitalize-headers() {
    self = Vimwiki::File::TextProcessingClasses::HeadlineCapitalizer.new.capitalize-headers(self);
}

Run Code Online (Sandbox Code Playgroud)

问题是该capitalize-headers方法因错误而失败,Cannot modify an immutable因为它是一个字符串。我可以避免这个问题的一种方法是简单地不子类化Str并为Str我想要使用的方法编写包装器,如下所示:

unit class Vimwiki::File::ContentStr;

has Str $!content;

method uc() {
   $!content = $!content.uc; 
}

Run Code Online (Sandbox Code Playgroud)

但这让我想知道,Raku 中是否可能有类似 AUTOLOAD 之类的东西,而不是编写这些包装方法,这样如果方法不存在,则可以默认在属性上调用不存在的方法$!content

这可能吗?或者是否有更干净的方法来解决不可变对象问题?

raku

3
推荐指数
1
解决办法
248
查看次数

似乎无法从运行中获取非字符串输出

我想不出其他方式来运行输出二进制文件的命令行,所以我不得不这样做。

让我们向 git 存储库添加一个二进制文件

mkdir test
cd test
git init .
wget https://upload.wikimedia.org/wikipedia/commons/thumb/8/85/Camelia.svg/320px-Camelia.svg.png
git add 320px-Camelia.svg.png
git commit -am "Added Camelia"
Run Code Online (Sandbox Code Playgroud)

获取输出的提交哈希,我们将其用作<grabbed hash>如下方式使用它。

现在,运行这个:

say (run "git", "show", "<grabbed hash>:Camelia.svg.png", :out).out
Run Code Online (Sandbox Code Playgroud)

这将返回一条Malformed UTF-8消息。公平地说,它不是二进制的。但是,我尝试用 捕获该异常,try但没有办法。我尝试将运行与 分开out,但仍然遇到无法捕获的异常。任何想法?

io raku

3
推荐指数
1
解决办法
115
查看次数

标签 统计

raku ×10

concurrency ×1

grammar ×1

io ×1

perl ×1