标签: raku

检查签名是否接受捕获从调用者中删除属性值

我有一个 java 称之为“bean”的类。我希望能够分阶段合并属性值,同时检查合并的任何内容是否与子方法 BUILD 签名相匹配:

    class A {
      has Int $.a;
      has Str $.b;
      submethod BUILD ( Int :$!a, Str :$!b ) { }
      my Signature $sig = ( A.^methods.grep: { .name eq 'BUILD' } )[0].signature;
      method fill-in ( *%args ) {
        say 'filling-in';
        my @args = %args.pairs;
        @args.unshift: self;
        say 'after unshift';
        self.raku.say;
        my Capture $arg-capture = @args.Capture;
        say 'after Capture';
        self.raku.say;
        unless $arg-capture ~~ $sig {
          warn '(warning)';
          return;
        }
        my Str $name;
        my %merged;
        say 'after check'; …
Run Code Online (Sandbox Code Playgroud)

raku

4
推荐指数
1
解决办法
93
查看次数

如何让“run”命令在 Windows 11 上运行?

我想尝试在 Windows 上测试 Raku 代码。我设法在 VirtualBox 上设置 Windows 11,并安装 Raku 二进制文件,并且可以执行脚本。

run但是,我似乎无法在不返回错误的情况下获得最简单的命令来执行任何操作:

run('ls');

结果是:

The spawned command 'ls' exited unsuccessfully (exit code: 1, signal: 0)
  in block <unit> at .\test.txt line 5
Run Code Online (Sandbox Code Playgroud)

我也尝试过使用dir命令,但遇到了同样的问题。

windows raku

4
推荐指数
1
解决办法
167
查看次数

如何测试提示命令?

my $x = prompt "Are you OK? ";
say $x ~~ 'y' ?? "Great!" !! "Bummer";

use Test;
Run Code Online (Sandbox Code Playgroud)

at/ 文件中可以放入哪些测试?它如何响应提示?

testing prompt raku

4
推荐指数
1
解决办法
137
查看次数

使用 Raku 语法时,可以限制解析时间吗?


\n

以下 Raku 程序定义了一个语法Parser,然后尝试使用它来解析字符串baa。然而,程序执行时间太长。有没有办法限制用于解析的执行时间量,以便解析可以被视为已超出所需的限制并超时\xe2\x80\xaf?

\n
\n
grammar Parser\n  {\n  token  TOP  { <S> }\n  token S { \'\' | <S> <S> | \'a\' <S> \'b\' | <S> \'a\' | \'b\' <S> \'b\' }\n  }\n\nsub MAIN()\n  {\n  say Parser.parse( \'baa\' ).Bool ; # Would like True, False, or Timeout\n  } # end sub MAIN\n
Run Code Online (Sandbox Code Playgroud)\n
\n

另外,是否有计划让Raku实现ANTLR自适应 LL(*)解析?ANTLR 4.11.1 版本的代码生成目标包括 Java、Python 等,但不包括 Raku。

\n
\n

grammar parsing raku

4
推荐指数
1
解决办法
129
查看次数

为什么 0 有时是数字有时不是数字?

为什么0有时是数字有时不是数字?

my @numbers = -1, 0, 1, 'hello';
.say for @numbers.grep( Numeric );
say "====";
for @numbers -> $n {
    say $n if $n.Numeric;
}
Run Code Online (Sandbox Code Playgroud)
#-1
#0
#1
#====
#-1
#1
Run Code Online (Sandbox Code Playgroud)

raku

4
推荐指数
1
解决办法
113
查看次数

如何将包含内存地址的“CArray”中的值“分配”给“Pointer”?

这是一个NativeCall问题。

我有 8 个字节(小端)表示CArray内存地址。我如何创建一个Pointer出来呢?

CArrayPointer是 NativeCall 的两种 C 兼容类型。 s 长 8 个字节。事情应该排成一行,但是如何以 NativeCall 可接受的方式Pointer将 a 中的指针地址放入 aCArray中?)Pointer

c pointers nativecall raku

4
推荐指数
1
解决办法
167
查看次数

为什么 IO::Socket::Async 不发出尾随“a”?

我想知道是否有人知道如何绕过 IO::Socket::Async 的编码,特别是以下描述的缺点:

例如,如果使用 UTF-8 编码并且数据包中的最后一个字节解码为“a”,则不会发出此消息,因为下一个数据包可能包含应一起形成单个字素的组合字符。控制字符(例如 \n)始终充当字素边界,因此任何使用换行符或空字节作为终止符的基于文本的协议都不需要特殊考虑。

目前,这导致我的套接字省略消息中的最后一个字符,但我不确定如何解决此问题。我尝试将 转换Connection为 a Channel,然后将一个哑巴输入\n其中,模拟消息输入的结束,但这不起作用。如何解决 UTF-8 编码中的这个问题?

这是重现这一点的 MVP:

sub listen(Int $port) {
  react {
    whenever IO::Socket::Async.listen('0.0.0.0', $port) -> $connection {
      whenever $connection.Supply -> $data {
        say $data;
        $connection.print: $data;
      }
    }
  }
}

listen(9999);
Run Code Online (Sandbox Code Playgroud)

现在,如果您使用任何不以 结尾的数据访问本地计算机上的端口 9999,\n您将看到最后一个字节被忽略。

unicode utf-8 raku

4
推荐指数
1
解决办法
136
查看次数

声明器块可以用于变量声明吗?

当我运行raku --doc test.raku以下代码时:

#! /usr/bin/env raku
use v6.d;

#| The answer
my Int $bar = 42;
#= Thank you, Douglas

say $bar.WHY.leading;
say $bar.WHY.following;
Run Code Online (Sandbox Code Playgroud)

我没有得到任何输出。当我运行代码(raku test.raku)时,输出是:

Nil
Nil
Run Code Online (Sandbox Code Playgroud)

有没有办法将声明器块与变量一起使用?

comments raku pod6

4
推荐指数
1
解决办法
94
查看次数

处理音频文件的 POST 请求

使用以下命令的等效 POST 请求是什么:

对于这个curl shell命令:

curl --request POST \
  --url https://api.someservice.com/v1/ \
  --header 'Authorization: Bearer TOKEN' \
  --header 'Content-Type: multipart/form-data' \
  --form file=@/path/to/file/audio.mp3 \
  --form transformer=trans-2 \
  --form format=text
Run Code Online (Sandbox Code Playgroud)

我尝试按照“Cro::HTTP::Client”中的示例进行操作, 但没有成功......

(参见以 开头的示例my $resp = await Cro::HTTP::Client.post: 'we.love.pand.as/pandas',


更新

这是一个使用@jja 答案的工作示例,需要:

  • 拥有 OpenAI(帐户和)授权密钥

  • 从此处下载 MP3 文件之一

    • 或者使用另一个带有语音录音的 MP3 文件。
use HTTP::Tiny;


my $fileName = $*HOME ~ '/Downloads/HelloRaccoonsEN.mp3';


say .<content>.decode given HTTP::Tiny.post: 'https://api.openai.com/v1/audio/transcriptions',
        headers => { authorization => "Bearer {%*ENV<OPENAI_API_KEY>}" },
        content …
Run Code Online (Sandbox Code Playgroud)

web cro raku

4
推荐指数
2
解决办法
711
查看次数

干扰WhateverCode生成,而是将Whatever逐字传递给自定义中缀运算符

# use Something;

sub infix:<-_->(*@args) is assoc("list") { @args.raku }

say * -_- 5
Run Code Online (Sandbox Code Playgroud)

有了这个我得到

WhateverCode.new
Run Code Online (Sandbox Code Playgroud)

我预计

[Whatever, 5]
Run Code Online (Sandbox Code Playgroud)

所以它会传递任何对象而不进行闭包生成

raku

4
推荐指数
1
解决办法
141
查看次数

标签 统计

raku ×10

c ×1

comments ×1

cro ×1

grammar ×1

nativecall ×1

parsing ×1

pod6 ×1

pointers ×1

prompt ×1

testing ×1

unicode ×1

utf-8 ×1

web ×1

windows ×1