我发现脚本成瘾者加入 raku 的一个巨大卖点就是拥有这样的结构
my $w = "Hello world";
$w
~~ s/Hello/Hola/
~~ s/world/mundo/
;
say $w; # » Hola world
Run Code Online (Sandbox Code Playgroud)
但是我似乎无法写出这样的东西。据我所知,用 的.subst方法做这件事Str太丑了,这种连锁
s///甚至tr///基本上也将成为sed用户等的入门药物。
我的问题是我是否遗漏了某些东西,如果在 raku 中以某种方式可能会出现与此类似的东西。我不是初学者,我无法弄清楚。
我正在编写一个包含某些部分的绘图包,并且我的运算符和数据类型分散在整个过程中。但是我不希望用户每次都添加相应的模块,因为它会非常混乱,例如我在不同的路径中有一个Point类,一个Monoid角色和一个Style类
unit module Package::Data::Monoid;
# $?FILE = lib/Package/Data/Monoid.pm6
role Monoid {...}
Run Code Online (Sandbox Code Playgroud)
unit module Package::Data::Point;
# $?FILE = lib/Package/Data/Point.pm6
class Point {...}
Run Code Online (Sandbox Code Playgroud)
unit module Package::Data::Style;
# $?FILE = lib/Package/Data/Style.pm6
class Style {...}
Run Code Online (Sandbox Code Playgroud)
我想有一个haskell类似的前奏,lib/Package/Prelude.pm6
效果是我可以写出这样的脚本
use Package::Prelude;
# I can use Point right away, Style etc...
Run Code Online (Sandbox Code Playgroud)
而不是做
use Package::Data::Style;
use Package::Data::Point;
use Package::Data::Monoid;
# I can too use point right away, but for users not knowing the
# inner workings it's too overwhelming …Run Code Online (Sandbox Code Playgroud) 您可以在 raku 中写入以下内容的事实
unit sub MAIN(Int $j = 2);
say $j
Run Code Online (Sandbox Code Playgroud)
是惊人的,而且参数解析是为你完成的这一事实是无用的。然而,我个人觉得非常不符合人体工程学,对于这样的论点,你必须写一个=来设置值,即
./script.raku -j=5
Run Code Online (Sandbox Code Playgroud)
我想知道是否有办法告诉解析器它应该允许没有选项的选项,=以便我可以编写
./script.raku -j 5
Run Code Online (Sandbox Code Playgroud)
我还没有在文档中看到这个,对于像我这样的人来说,这真的会更直观。如果目前不可能,我认为这将是一个有用的附加组件。
也许我遗漏了一些东西,但我想知道这段代码是否应该编译有充分的理由
role L {
method do-l (Int, Int --> Int ) { ... }
}
class A does L {
method do-l (Int $a, Real $b --> Str) {
.Str ~ ": Did you expect Int?" with $a + $b
}
}
my $a = A.new;
say $a.do-l: 2, 3.323
Run Code Online (Sandbox Code Playgroud)
这将输出
5.323: Did you expect Int?
Run Code Online (Sandbox Code Playgroud)
我很好奇是否有人知道编译器至少通过角色的实现签名抛出一些警告的方法L。