问题标签 [rakudo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
121 浏览

object - 有谁知道为什么 TWEAK 例程在 BUILD 例程之前被击中?

最小代码:

和输出:

相关文档位于https://docs.raku.org/language/objects#Object_construction。我引用:“在调用 BUILD 方法之后,调用名为 TWEAK 的方法(如果它们存在),再次使用传递给 new 的所有命名参数”。

我正在使用 Fedora 32 附带的 rakudo 版本(rakudo-0.2020.02-1.fc32.x86_64 所以可能是今年 2 月)。

0 投票
1 回答
90 浏览

slice - 切片索引的惰性如何影响数组/列表的切片?[乐]

当我们使用超出数组边界的索引对数组进行切片时,我们会得到未定义 (Any)

当我们将相同的切片索引作为惰性列表传递时,我们会得到数组/列表的现有值(仅此而已):

很明显,切片索引的惰性会影响结果。

试图理解事物的本来面目,作为概念证明,我编写了切片机制的简单版本:

但我想知道我的幼稚算法是否描述了事物在幕后计算的方式!

0 投票
2 回答
207 浏览

promise - 为什么我不允许违反 Promise?

以下简单的 Promise 是发誓的,我不允许破坏它。

这是为什么?

0 投票
1 回答
192 浏览

operators - 是否可以在 Raku 中定义一个新的运算符并控制其优先级?

考虑这个新的运算符:

此代码打印:

但是,是否可以控制优先级?它的行为如下:

无需使用括号

0 投票
2 回答
196 浏览

regex - Raku 正则表达式:如何知道哪个组被交替捕获

使用 perl(以及几乎任何正则表达式风格),每个组都按顺序编号。

例如,这段代码:

印刷xbar

但是,对于 Raku,它的行为就像有一个分支重置组包装了整个正则表达式:

印刷barx

我对这种行为没意见:)。但是,有时了解在交替下捕获了哪个组是有用的。

我怎样才能知道有 raku 的组?

0 投票
3 回答
191 浏览

list - 如何在 Raku 中无限地懒惰地循环列表?

这主要是为了了解Raku有多棒。

问题

是否有内置方法可以获取一个列表并无限期地循环遍历它,例如生成惰性列表

(a, b, c)列表文档中的任何内容似乎都没有明显的作用。

可能的解决方案

我至少能想到一对。

更单调的脚踏实地的方法是在惰性范围上进行映射 。在REPL 中:@array[<variable> mod length-of-@array]0..Infperl6

一个更酷(我认为)的解决方案是让您首先将您的列表变成一个slip,然后无限期地将重复运算符应用于该 slip:

结论

尽管我可以实现这一点(特别是最后一个解决方案非常简洁和令人满意),但我想知道我是否遗漏了专门为此目的而构建的任何东西。


编辑回复:接受的答案

这是为了稍微详细说明@Brad Gilbert 的答案。该运算符在超运算«~»符中包装字符串连接 ,这导致将包装的二元运算符应用于从两个列表中顺序选择的元素。~« »

所以为了实现我想要的(列表循环到所需的长度,比如 100),一个人会做

这产生

(100 个条目)。但它确实有几个缺点:

  • 由于应用了~
  • 它实际上并没有产生一个惰性无限列表:

返回

0 投票
1 回答
93 浏览

regex - Raku:在正则表达式中使用主题变量(来自“for”)

我有这个按预期工作的代码:

它打印:

但是,如果我尝试在 for 循环中使用主题变量,如下所示:

我明白了:

使用后缀的结果相同:

这是正则表达式中主题变量的特例吗?

它是否应该保存与之匹配的整个字符串?

0 投票
1 回答
211 浏览

regex - Raku 正则表达式:不一致的最长令牌匹配

Raku 的正则表达式应该匹配最长的标记。

事实上,在这段代码中可以看到这种行为:

但是,当文本在变量中时,它的工作方式似乎不同:

为什么它们以不同的方式工作?有没有办法使用变量并且仍然匹配最长的标记?

0 投票
1 回答
103 浏览

raku - 在 raku REPL 中定义后缀运算符的问题

如果我在 raku 中有以下程序,它运行良好:

但是如果我在 raku REPL 中定义这个函数,我会得到:

对于阶乘函数,它可以正常工作并且符合预期,但我得到了这个!操作员:

我需要一个特殊的 sintax 来定义 raku REPL 中的运算符,或者取决于环境的加载方式。

我在 OSX Catalina 中使用

0 投票
1 回答
89 浏览

publish-subscribe - Supply method act 与 tap 之间的区别

在关于供应方法法案(vs tap) https://docs.raku.org/type/Supply#method_act的 Raku 文档中指出:

保证给定的代码一次只能由一个线程执行

我的理解是,一个线程必须在另一个线程必须运行它之前完成特定的代码对象。

如果是这样的话,当我尝试实现该功能时,我偶然发现了一种不同的行为。查看以下代码片段,其中创建了 2 个“动作”并在不同的线程中运行:

结果如下(增加了时间间隔和评论):

可以很容易地观察到代码对象(子例程&actor)在 2 个线程中同时运行(例如,请参见输出第 4 行和第 7 行)。

有人可以澄清我对此事的误解吗?