我需要将一些代码从外部程序传递到一个类中.
在我使用的通用模块中(为简单起见,减少了愚蠢)
class A {
has &.hl;
submethod BUILD( :&!hl ) {}
}
Run Code Online (Sandbox Code Playgroud)
在程序的其他地方,我有
use A;
my &hl = -> $st {
my $p = shell "hl $st", :in,:out;
$p.out.slurp
};
my $statement = 'my $perl6-variable = "Helloooo";'
my $first = &hl($statement);
my A $a .= new(:&hl);
my $second = $a.hl( $statement );
Run Code Online (Sandbox Code Playgroud)
$first
将被处理并将包含预期的结果.
在$second
,我将得到一个运行时错误
Too many positionals passed; expected 1 argument but got 2
Run Code Online (Sandbox Code Playgroud)
很明显,类中的例程正在提供调用者和参数$s
.
重写类以提供自定义访问器:
class A {
has &!hl;
submethod BUILD( :&!hl …
Run Code Online (Sandbox Code Playgroud) cro run
当目录树中的任何内容发生更改时,停止服务器,重新编译,重新启动服务器。那太棒了。
但是在开发客户端 UI 并使用 NPX/yarn/webpack 时,需要一个额外的步骤来生成main.js
文件。
在 Cro 教程中,这一步似乎是手动完成的,即,我们有一行“我们有了它。npm run build
刷新,然后试一试”。这npm run build
是一个必须“手动”运行的命令。
有没有一种简单的方法,例如,.cro.yml
在检测到子目录树中的更改时使用强制另一个命令?例如,如果客户端 UI 文件在下面,path/to/cro-app/client-ui-directory
并且在任何文件更改时要运行的命令是path/to/cro-app/client-ui/directory/yarn build
我有一个解析字符串的正则表达式,该字符串应该是 Raku 的完全限定模块名称(见下文)。由于 Precomp 模块中似乎只使用了 auth、ver 和 api 版本,因此我只测试了这些版本。
我需要将模块的名称与标识符分开。
我的正则表达式是:
my $rx := /
^
$<name> = ( [ \w | '::' ] + )
[ ':' $<part> = ( [ 'ver' | 'auth' | 'api' ] )
\< ~ \> $<val> = ( .*? ) ]*
$
/;
Run Code Online (Sandbox Code Playgroud)
问题是是否有一种标准方法可以匹配 Raku 模块或子模块,以便此正则表达式将来不会成为错误。
在我正在开发的模块config
中,resources
目录中将提供一个文件,因此可以%?RESOURCES<config>
在我正在开发的代码中访问它。
在编写和测试代码时,我需要设置 %?RESOURCES。如何才能做到这一点?
在模块开始时,在开发阶段,我有use lib 'lib'
.
我还没有安装 zef 模块,%?RESOURCES
Nil 也是如此。
META6.json 文件包含"resources": [ "config" ]
.
我正在使用Rakudo Perl编译的文档,文档可以更新.
我将文档存储在CompUnit :: PrecompilationStore :: File中
如何为较新版本更改旧版本?
以下程序生成相同的输出,就好像较新版本未存储在CompUnit中一样.我究竟做错了什么?
use v6.c;
use nqp;
'cache'.IO.unlink if 'cache'.IO ~~ e;
my $precomp-store = CompUnit::PrecompilationStore::File.new(prefix=>'cache'.IO);
my $precomp = CompUnit::PrecompilationRepository::Default.new(store=> $precomp-store );
my $key = nqp::sha1('test.pod6');
'test.pod6'.IO.spurt(q:to/--END--/);
=begin pod
=TITLE More and more
Some text
=end pod
--END--
$precomp.precompile('test.pod6'.IO, $key, :force);
my $handle = $precomp.load( $key )[0];
my $resurrected = nqp::atkey($handle.unit,'$=pod')[0];
say $resurrected.contents[1].contents[0];
'test.pod6'.IO.spurt(q:to/--END--/);
=begin pod
=TITLE More and more
Some more text added
=end pod
--END--
# $precomp-store.unlock;
# fails with:
# Attempt …
Run Code Online (Sandbox Code Playgroud) 运行以下程序时-t=17 -fn=15
,程序会在合理的时间内停止.这意味着最大线程数大于写入和并发缓存的文件数.
按要求更新:$ perl6时的探查器输出 --profile con-test.p6 -t = 7 -fn = 5
当-t> = -fn时程序无法停止!
当程序运行-t=17 -fn=20 --hack
程序时,然后在合理的时间内运行完成.
我不知道下面的程序是否失败,因为我在CompUnit中遇到问题,或者是否存在我遗漏的线程(或其他)问题.
假设存在某种线程情况并且文件数必须小于线程数,那么重写hack的最佳方法是什么.目前,数组中充满了Promises,然后允许保留.但等待要求在清空阵列并重新填充之前保留所有这些.我认为这应该被重写为渠道或供应.但是,我无法弄清楚如何做到这一点.
提前致谢.
use v6.c;
use nqp;
use File::Directory::Tree;
my Lock $lock;
my $precomp;
#assume a writable directory files/
sub MAIN(:$t=5, :$fn = 10, :$hack=False ) {
PROCESS::<$SCHEDULER> = ThreadPoolScheduler.new(initial_threads => 0, max_threads => $t);
rmtree '.test';
empty-directory 'files';
my $precomp-store = CompUnit::PrecompilationStore::File.new(prefix => '.test'.IO );
$precomp = CompUnit::PrecompilationRepository::Default.new(store => $precomp-store);
$lock .=new;
my %files = |gather …
Run Code Online (Sandbox Code Playgroud) 存根Routes.pm6的第13行创建的新实例 Cro::HTTP::Log::File
在哪里可以找到该课程的文档?例如,是否要将日志和错误发送到同一文件?
我尝试对:logs使用字符串,但出现错误。该类需要文件句柄。我在寻找一些文档,但是那里是否存在并不明显。
我如何发现本地是否安装了 Raku 模块?如果未安装某些模块,例如。GUI,然后将使用 CLI。例如。
if is-installed('GTK::Simple') { gui-response } else { cli-response };
Run Code Online (Sandbox Code Playgroud)
'is-installed'的主体应该是什么?
这与我的另一个问题类似,但又不完全相同:内容检查部分而非全部类属性
我正在编写一个测试来验证处理对对象的影响。但是我无法弄清楚如何获取一组已知对象属性的值,但使用相同的代码进行测试。类似于以下内容(不起作用):
class A { has $.a, has $.b, has $.c };
my A $v .=new(:1a, :2b);
for <a b> { ok $v.{$_} > 0 }; # this does not work, but illustrates the intent.
Run Code Online (Sandbox Code Playgroud)
如果我使用 Hash 而不是对象,那么很容易从知道键的 Hash 中获取值。
目前我能想到的就是测试每个属性:
ok $v.a > 0;
ok $v.b > 0;
Run Code Online (Sandbox Code Playgroud)
另外,我不想查看对象的所有属性,这是 .^attributes 给我的,只查看其中的一些。
在 Raku 中,我想替换$_<something>
为\xc6\xa4<something>
where $_
does Associative
。
假设我有类似的东西
\nmy %h = %( aaa => { say $_<content> } );\n%h<aaa>.( %( :content('Hello world'), ) );\n
Run Code Online (Sandbox Code Playgroud)\n这会产生Hello world
.
由于$_
会出现很多次,我想将其替换为\xc6\xa4
(不仅仅是为了保存一个字符,而是为了检查存在性等)。
所以我想要的是:
\nmy %h = %( aaa => { say \xc6\xa4<content> } );\n%h<aaa>.( %( :content('Hello world '), ) );\n
Run Code Online (Sandbox Code Playgroud)\n我可以编写一个前缀运算符但是,我需要访问调用上下文的主题变量,即“aaa”指向的块内部sub prefix:<\xc6\xa4>(Str $key)
的值。$_
这是我尝试过的代码:
\nsub prefix:<\xc6\xa4>(Str $key) {\n my $topic = callframe(1).my<$_>;\n # …
Run Code Online (Sandbox Code Playgroud) 我想测试签名中第一个对象的类型。下面显示了我发现的一些方法。但是为什么对 Type(下面 3 个测试中的第 2 个)的智能匹配不起作用?有没有比字符串化和测试 Type 的字符串等价物更好的方法?(以下是我正在研究的用例)
raku -e "sub a( |c ) { say so |c[0].WHAT.raku ~~ /'Rat'/, so |c[0].WHAT ~~ Rat, so |c[0].^name ~~ /'Rat'/ };a(3/2);a(2)"
TrueFalseTrue
FalseFalseFalse
# OUTPUT:
#TrueFalseTrue
#FalseFalseFalse
Run Code Online (Sandbox Code Playgroud)
我正在写一个proto sub handle
,大多数潜艇都有类似的签名,例如。multi sub handle( Pod $node, MyObj $p, Int $level --> Str)
所以大多数多子节点根据 $node 中的内容做不同的事情。但是,如何处理handle
使用Nil
或纯字符串调用的情况。我正在考虑类似的事情
proto handle(|c) {
if |c[0].^name ~~ /'Str'/ { # code for string }
else { {*} }
}
Run Code Online (Sandbox Code Playgroud) config
从a 的部分中提取哈希值如何最好RakuAST::Doc::Block
?这是程序:
use v6.d;
use experimental :rakuast;
my $ast = Q:to/CONF/.AST;
=for rakudoc :category("Language") :kind<sub> :subkind<operator>
Stuff
CONF
my $block = $ast.rakudoc[0];
my %config = $block.config.pairs.map( { .key => .value.DEPARSE } );
say %config.raku
Run Code Online (Sandbox Code Playgroud)
这是结果。
{:category("(\"Language\")"), :kind("<sub>"), :subkind("<operator>")}
Run Code Online (Sandbox Code Playgroud)
但.DEPARSE
正在生成引号,即("...")
和<...>
。我怎样才能提取字符串?
raku ×9
module ×3
perl6 ×3
class ×2
cro ×2
attributes ×1
concurrency ×1
installation ×1
regex ×1