标签: raku

如何在Perl6中编写自定义访问器方法?

如何在Perl6中编写自定义访问器方法?

如果我有这个课程:

class Wizard {
    has Int $.mana is rw;
}
Run Code Online (Sandbox Code Playgroud)

我可以做这个:

my Wizard $gandalf .= new;
$gandalf.mana = 150;
Run Code Online (Sandbox Code Playgroud)

假设我想在我的Perl6类中为一个setter添加一点检查而不放弃$gandalf.mana = 150;表示法(换句话说,我不想写这个:) $gandalf.setMana(150);.如果它试图设定负面法术力,该程序应该死亡.我该怎么做呢?Perl6文档提到它可以编写自定义访问器,但没有说明如何.

perl6 raku

16
推荐指数
2
解决办法
433
查看次数

Perl 6是否与Python的dir()相当?

我正试图在Perl 6中感到舒服.当我在REPL提示符下时,我在Python中发现的一件事就是我可以做一个dir(对象)并找出一个对象的属性,在Python中包含对象的方法.

这通常有助于提醒我想做什么; "哦,这是正确的,Python中的修剪被称为条带",就像那样.

在Perl 6中,我知道内省方法.WHO,.WHAT,.WHICH,.HOW和.WHY,但这些是在类或对象级别.我如何找出对象内部的内容,以及我可以对它做些什么?

introspection perl6 raku

16
推荐指数
1
解决办法
285
查看次数

为什么源文件名不是人类可读的?

我安装了Perl6 rakudobrew并且浏览已安装的文件以查看十六进制文件名列表~/.rakudobrew/moar-2018.08/install/share/perl6/site/sources以及~/.rakudobrew/moar-2018.08/install/share/perl6/sources/.

例如

> ls ~/.rakudobrew/moar-2018.08/install/share/perl6/sources/
09A0291155A88760B69483D7F27D1FBD8A131A35  AAC61C0EC6F88780427830443A057030CAA33846
24DD121B5B4774C04A7084827BFAD92199756E03  C57EBB9F7A3922A4DA48EE8FCF34A4DC55942942
2ACCA56EF5582D3ED623105F00BD76D7449263F7  C712FE6969F786C9380D643DF17E85D06868219E
51E302443A2C8FF185ABC10CA1E5520EFEE885A1  FBA542C3C62C08EB82C1F4D25BE7B4696F41B923
522BE83A1D821D8844E8579B32BA04966BAB7B87  FE7156F9200E802D3DB8FA628CF91AD6B020539B
5DD1D8B49C838828E13504545C427D3D157E56EC
Run Code Online (Sandbox Code Playgroud)

这些文件包含软件包的源代码,但这种方式并不容易访问.那是什么理由?

rakudo perl6 raku

16
推荐指数
1
解决办法
407
查看次数

如何使用新的JS后端从Perl 6调用JavaScript内置函数?

我知道在Perl 6使用该后端时可以调用Java:如何从perl6调用Java方法

有没有办法访问例如Perl 6中的JavaScript DOM接口,并在浏览器中运行新的Rakudo JavaScript VM?

也许是这样的:

use v6;
use javascript::dom:from<JavaScript>;
Run Code Online (Sandbox Code Playgroud)

javascript rakudo perl6 raku

16
推荐指数
1
解决办法
375
查看次数

令牌和规则之间的真正区别是什么?

我被 Raku 所吸引是因为它的内置语法,并认为我会玩弄它并编写一个简单的电子邮件地址解析器,唯一的问题是:我无法让它工作。

在找到真正有效的东西之前,我尝试了无数次迭代,但我很难理解为什么。

它归结为,正在更改tokenrule

这是我的示例代码:

grammar Email {
  token TOP { <name> '@' [<subdomain> '.']* <domain> '.' <tld> }  
  token name { \w+ ['.' \w+]* }
  token domain { \w+ }
  token subdomain { \w+ }
  token tld { \w+ }
}
say Email.parse('foo.bar@baz.example.com');
Run Code Online (Sandbox Code Playgroud)

不起作用,它只是打印Nil,但是

grammar Email {
  rule TOP { <name> '@' [<subdomain> '.']* <domain> '.' <tld> }  
  token name { \w+ ['.' \w+]* }
  token domain { \w+ }
  token subdomain …
Run Code Online (Sandbox Code Playgroud)

grammar raku

16
推荐指数
2
解决办法
377
查看次数

Raku 中的否定命名正则表达式或字符类插值

我正在尝试解析带引号的字符串。像这样的东西:

say '"in quotes"' ~~ / '"' <-[ " ]> * '"'/;
Run Code Online (Sandbox Code Playgroud)

(来自https://docs.raku.org/language/regexes “枚举字符类和范围”)但是......我想要更多一种类型的引用。这样的东西组成了不起作用的语法:

  token attribute_value { <quote> ($<-quote>) $<quote> };
  token quote           { <["']> };
Run Code Online (Sandbox Code Playgroud)

我发现这个讨论是另一种方法,但它似乎没有去任何地方:https : //github.com/Raku/problem-solving/issues/97。有没有办法做这种事情?谢谢!

更新 1

我无法让@user0721090601 的“多令牌”解决方案起作用。我的第一次尝试产生了:

say '"in quotes"' ~~ / '"' <-[ " ]> * '"'/;
Run Code Online (Sandbox Code Playgroud)

在做了一些研究之后,我补充说proto token quoted_string {*}

#!/usr/bin/env raku

use Grammar::Tracer;

grammar QuotedString {
  proto token quoted_string {*}
  multi token quoted_string:sym<'> { <sym> ~ <sym> <-[']> }
  multi token quoted_string:sym<"> { <sym> ~ <sym> …
Run Code Online (Sandbox Code Playgroud)

regex raku

16
推荐指数
1
解决办法
132
查看次数

通过索引从字符串中删除一些字符(Raku)

常见问题解答:在 Raku 中,如何根据索引从字符串中删除一些字符?

假设我想删除索引 1 到 3 和 8

xxx("0123456789", (1..3, 8).flat);  # 045679
Run Code Online (Sandbox Code Playgroud)

raku

15
推荐指数
7
解决办法
364
查看次数

在 Raku 中将单词的字符简洁地转换为其 ascii 代码列表

我正在尝试将单词wall转换为它的 ascii 代码列表,(119, 97, 108, 108)如下所示:

my @ascii="abcdefghijklmnopqrstuvwxyz";

my @tmp;
map { push @tmp, $_.ord if $_.ord == @ascii.comb.any.ord }, "wall".comb;
say @tmp;
Run Code Online (Sandbox Code Playgroud)
  1. 有没有办法使用@tmp而不在单独的行中声明它?

  2. 有没有办法在一行而不是 3 行中生成 ascii 代码列表?如果是这样,该怎么做?

请注意,我必须使用@ascii变量,即我不能使用连续递增的 ascii 序列,(97, 98, 99 ... 122)因为我也计划将此代码用于非 ascii 语言。

list raku

15
推荐指数
2
解决办法
315
查看次数

15
推荐指数
1
解决办法
347
查看次数

有没有一种程序化的方式来阐述 raku 中的“半风”?

我有这个工作:

my %pnt = %( cardinal => <N E S W>, 
             ordinal  => <N NE E SE S SW W NW>,
             half-winds => <N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW>,
            );
Run Code Online (Sandbox Code Playgroud)

我认为有可能以编程方式创建半风阵列。

然而,我可怜的尝试似乎更加冗长:

my @cards = <N E S W>; 
my @odds  = <NE SE SW NW>;
my @ords  = ( @cards Z @odds ).flat; 
my @mids  = ( ( @cards Z~ @odds ) Z ( @cards.rotate(1) Z~ @odds ) ).flat; …
Run Code Online (Sandbox Code Playgroud)

raku

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