我有一个 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) 我想尝试在 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命令,但遇到了同样的问题。
my $x = prompt "Are you OK? ";
say $x ~~ 'y' ?? "Great!" !! "Bummer";
use Test;
Run Code Online (Sandbox Code Playgroud)
at/ 文件中可以放入哪些测试?它如何响应提示?
以下 Raku 程序定义了一个语法Parser,然后尝试使用它来解析字符串baa。然而,程序执行时间太长。有没有办法限制用于解析的执行时间量,以便解析可以被视为已超出所需的限制并超时\xe2\x80\xaf?
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\nRun Code Online (Sandbox Code Playgroud)\n另外,是否有计划让Raku实现ANTLR的自适应 LL(*)解析?ANTLR 4.11.1 版本的代码生成目标包括 Java、Python 等,但不包括 Raku。
\n为什么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) 这是一个NativeCall问题。
我有 8 个字节(小端)表示CArray内存地址。我如何创建一个Pointer出来呢?
(CArray和Pointer是 NativeCall 的两种 C 兼容类型。 s 长 8 个字节。事情应该排成一行,但是如何以 NativeCall 可接受的方式Pointer将 a 中的指针地址放入 aCArray中?)Pointer
我想知道是否有人知道如何绕过 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您将看到最后一个字节被忽略。
当我运行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)
有没有办法将声明器块与变量一起使用?
使用以下命令的等效 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 文件之一
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) # 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)
所以它会传递任何对象而不进行闭包生成