我试图理解为什么属性值是 Proxy.new 之外的 Str(或其他),但成为 Proxy.new 内部的 Method。我把我的代码归结为:
#!/usr/bin/env raku
class Foo does Associative {
has Str $.string;
multi method AT-KEY (::?CLASS:D: Str $key) is rw {
say "\nOutside of Proxy: { $!string.raku }";
say "Outside of Proxy: { $!string.^name }";
Proxy.new(
FETCH => method () {
say "FETCH: { $!string.raku }";
say "FETCH: { $!string.^name }";
},
STORE => method ($value) {
say "STORE: { $!string.raku }";
say "STORE: { $!string.^name }";
}
);
}
}
my $string = 'foobar'; …
Run Code Online (Sandbox Code Playgroud) 在 cli 上,在 linux 中,cp -p
将修改/访问的时间戳保留在文件上。是否可以直接在 Raku 中执行相同操作?
Rosetta 示例使用 Nativecall,它可以通过系统调用来完成,但看起来这些时间戳只能在 Raku 中读取。我错过了什么吗?
这是“lib/Packr.rakumod”:
unit package Packr;
our class Packd is export {}
our class D::Packd is export {}
our class B::Packd is export {}
Run Code Online (Sandbox Code Playgroud)
这是packr.rakumod
:
use Packr;
for (Packr::Packd Packr::B::Packd Packr::D::Packd ) -> \P {
say P.new().raku;
}
Run Code Online (Sandbox Code Playgroud)
此错误与:
Could not find symbol '&Packd' in 'Packr::D'
Run Code Online (Sandbox Code Playgroud)
我声明它的顺序无关紧要,或者我是否使用“U”而不是“D”。我会尝试使用其他字母组合,但除非我遗漏了一些明显的东西,或者打错了一些东西,否则我真的很困惑。
如果我只是删除Packr::D::Packd
. 出于某种原因,它看起来像是在第一个错误之后退出,这似乎是迭代中的最后一个错误。
这是我今年的第一个问题,祝大家新年快乐!
当我尝试编辑我使用 10 个模块(主要是 Cro::HTTP )的文件并在分析开始后,逗号总是被 oom 杀死。我可以看到许多 raku 进程正在运行(为了分析?):
日志:
janv. 09 19:47:42 samuel-Virtual-Machine kernel: [ 4722] 1000 4722 654 29 40960 0 0 comma.sh
janv. 09 19:47:42 samuel-Virtual-Machine kernel: [ 4771] 1000 4771 1085318 155576 1949696 0 0 java
janv. 09 19:47:42 samuel-Virtual-Machine kernel: [ 4825] 1000 4825 783 35 40960 0 0 fsnotifier64
janv. 09 19:47:42 samuel-Virtual-Machine kernel: [ 5036] 1000 5036 52039 24008 364544 0 0 rakudo
janv. 09 19:47:42 samuel-Virtual-Machine kernel: [ 5038] 1000 5038 51119 …
Run Code Online (Sandbox Code Playgroud) 我在rakulang sub reddit 上问了这个问题,并被建议在这里发帖:
我在很多工作中一直退回到 Perl 5,所以我可以“完成它”,因为我对 Perl 5 更加熟悉。
但是,我需要构建一些可以订阅多个 MQTT 主题(在概念上类似于 websocket 订阅)和处理数据的东西,并将大量这些数据保留为内部状态。一个并发项目。所以我认为这是一个让自己沉浸在乐曲中的好机会:)
到目前为止,我知道我需要创建一个供应/给定/设置时,但我不完全确定我将如何处理通过每个主题收到的每个数据流的状态。我的 reddit 帖子的回复建议了 Cro,我认为这非常适合该法案。但仍有一些实现细节我不清楚。
例如,消息有效负载到达 topic foo
,我想将该有效负载中的数据添加到现有数组(我的内部状态)。
但是这种对主题的订阅将针对“未确定”数量的主题进行,并将在运行时进行调整。所以不可能有一个硬编码的数组来存储和管理这些数据@foo
例如,在非并发世界中,我可以使用与我的主题名称匹配的键创建一个散列(关联数组)%data<foo>
,并将该数组存储在那里。
然而,在并发的世界里,我需要一个互斥问题的答案。如果散列的每个成员都由不同的线程同时修改其数据,那么我认为整个散列将需要锁定。
这至少有可能导致死锁或性能不佳(我预计每秒会有数百条消息,跨多个主题订阅)。
也许我可以基于主题名称“动态”创建一个变量(或者更好的是对象),因此每个数据数组都有一个单独的内存地址。但是,我不确定如何做到这一点,或者确实在这种情况下这是否是“最佳”方法。
总之,问题 1:为此目的动态创建对象或变量是一种声音模式吗?问题 2:是否有一种我根本不知道的设计方法更合适?
因此,任何具体的建议将不胜感激。我觉得这是一个“我不知道我不知道”类型的问题!
谢谢!
我正在使用 zef 安装 Twitter 模块 zef install Twitter
我收到以下错误:
Enabled fetching backends [git path curl wget] don't understand git://github.com/raku-community-modules/Twitter You may need to configure one of the following backends, or install its underlying software - [pswebrequest]
我在谷歌上搜索了“pswebrequest”,但没有得到任何提示。
我尝试安装 HTTP::Tinyish(依赖项之一)以检查我的 zef 安装是否正常工作,这很好。
有关如何解决此问题的任何指示?
据我(和文档)所知,slurpies 只能与数组或哈希参数一起使用。但是,我最近打错了语法并输入了看起来像是标量 slurpy 的语法。令我惊讶的是,这并没有导致语法错误。经过一些实验,我确定以下都是允许的:
sub f(*$a) {}
sub g(**$a) {}
sub h(+$a) {}
Run Code Online (Sandbox Code Playgroud)
但是我看不到这个语法做了什么(如果有的话)。发生什么了?这是一个记录不足的功能吗?导致无效语法的错误不会引发错误?完全是别的什么?
我正在使用以下代码来解析 Markdown 文本的子集:
#!/usr/bin/perl6
use v6;
my @tests = '', #should print OK
"\n\n\n", #should print OK
'alpha', #should print OK
'1234', #should print OK
'alpha123', #should print OK
'a simple test without a heading and whitespaces and 123 numbers', #should print OK
'a simple test without a heading with punctuation, whitespaces and 123 numbers.', #should print OK
'a simple test without a heading with punctuation, whitespaces, 123 numbers, quotes\' ", braces (){}<>[], \/.', #should print OK
'a simple test …
Run Code Online (Sandbox Code Playgroud) 我想创建一个 raku 语法,可用于解析简化的 Markdown 语法。这种简化的降价语法必须满足以下条件:
为了解析这个语法,我创建了以下脚本:
#!/usr/bin/perl6
use v6;
grammar gram {
token TOP {
<text>
}
token text {
[ <section> ]+
}
token section {
<headline> <textline>*
}
token headline {
^^ [<hashheadline> | <underlineheadline>] $$
}
token hashheadline {
<hashprefix> <headlinecontent>
}
token hashprefix {
[\#] <space>
}
token underlineheadline {
<headlinecontent> [\n] <underline>
}
token underline {
[\-]**2..*
}
token headlinecontent {
[\N]+
}
token textline {
^^ (<[\N]-[\#]> (<[\N]-[\ ]> …
Run Code Online (Sandbox Code Playgroud) 我有相同的数据集并且运行相同的代码,但有时我在小数点后 19 位及以后得到不同的结果。虽然对于小于 0.0001 的数字这不是我很关心的问题,但它让我想知道小数点后 19 位是否是 Raku 的精度限制?
Word 104 differ:
0.04948872986571077 19 chars
0.04948872986571079 19 chars
Word 105 differ:
0.004052062278212545 20 chars
0.0040520622782125445 21 chars
Run Code Online (Sandbox Code Playgroud)