标签: raku

属性值在 Proxy.new (Raku) 中变成“方法”

我试图理解为什么属性值是 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)

methods proxy attributes raku

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

在 Raku 中复制文件时保留属性

在 cli 上,在 linux 中,cp -p将修改/访问的时间戳保留在文件上。是否可以直接在 Raku 中执行相同操作?

Rosetta 示例使用 Nativecall,它可以通过系统调用来完成,但看起来这些时间戳只能在 Raku 中读取。我错过了什么吗?

raku

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

我不能在一个包中创建嵌套包吗?

这是“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. 出于某种原因,它看起来像是在第一个错误之后退出,这似乎是迭代中的最后一个错误。

这是我今年的第一个问题,祝大家新年快乐!

syntax raku

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

Commaide 在分析文件时被 OOM 杀死

当我尝试编辑我使用 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)

raku commaide

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

并发性,应用程序设计的一般指南

我在rakulang sub reddit 上问了这个问题,并被建议在这里发帖:

我在很多工作中一直退回到 Perl 5,所以我可以“完成它”,因为我对 Perl 5 更加熟悉。

但是,我需要构建一些可以订阅多个 MQTT 主题(在概念上类似于 websocket 订阅)和处理数据的东西,并将大量这些数据保留为内部状态。一个并发项目。所以我认为这是一个让自己沉浸在乐曲中的好机会:)

到目前为止,我知道我需要创建一个供应/给定/设置时,但我不完全确定我将如何处理通过每个主题收到的每个数据流的状态。我的 reddit 帖子的回复建议了 Cro,我认为这非常适合该法案。但仍有一些实现细节我不清楚。

例如,消息有效负载到达 topic foo,我想将该有效负载中的数据添加到现有数组(我的内部状态)。

但是这种对主题的订阅将针对“未确定”数量的主题进行,并将在运行时进行调整。所以不可能有一个硬编码的数组来存储和管理这些数据@foo

例如,在非并发世界中,我可以使用与我的主题名称匹配的键创建一个散列(关联数组)%data<foo>,并将该数组存储在那里。

然而,在并发的世界里,我需要一个互斥问题的答案。如果散列的每个成员都由不同的线程同时修改其数据,那么我认为整个散列将需要锁定。

这至少有可能导致死锁或性能不佳(我预计每秒会有数百条消息,跨多个主题订阅)。

也许我可以基于主题名称“动态”创建一个变量(或者更好的是对象),因此每个数据数组都有一个单独的内存地址。但是,我不确定如何做到这一点,或者确实在这种情况下这是否是“最佳”方法。

总之,问题 1:为此目的动态创建对象或变量是一种声音模式吗?问题 2:是否有一种我根本不知道的设计方法更合适?

因此,任何具体的建议将不胜感激。我觉得这是一个“我不知道我不知道”类型的问题!

谢谢!

concurrency cro raku

6
推荐指数
0
解决办法
139
查看次数

使用 zef 安装 Twitter 模块时出错

我正在使用 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 安装是否正常工作,这很好。

有关如何解决此问题的任何指示?

zef raku

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

标量泥浆?

据我(和文档)所知,slurpies 只能与数组或哈希参数一起使用。但是,我最近打错了语法并输入了看起来像是标量 slurpy 的语法。令我惊讶的是,这并没有导致语法错误。经过一些实验,我确定以下都是允许的:

sub f(*$a)  {}
sub g(**$a) {}
sub h(+$a)  {}
Run Code Online (Sandbox Code Playgroud)

但是我看不到这个语法做了什么(如果有的话)。发生什么了?这是一个记录不足的功能吗?导致无效语法的错误不会引发错误?完全是别的什么?

rakudo raku

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

尝试为 Markdown 定义语法时的 raku 语法问题

我正在使用以下代码来解析 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

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

raku:用于解析部分的降价语法

我想创建一个 raku 语法,可用于解析简化的 Markdown 语法。这种简化的降价语法必须满足以下条件:

  • Markdown 中的标题必须以“#”开头,后跟一个空格,或者必须用“-”序列(至少 2 个)加下划线。
  • 文字不能自立。它必须以标题开头。

为了解析这个语法,我创建了以下脚本:

#!/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)

raku

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

小数点后 19 位及以后的数学精度

我有相同的数据集并且运行相同的代码,但有时我在小数点后 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)

math precision raku

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

标签 统计

raku ×10

attributes ×1

commaide ×1

concurrency ×1

cro ×1

math ×1

methods ×1

precision ×1

proxy ×1

rakudo ×1

syntax ×1

zef ×1