相关疑难解决方法(0)

在 raku 的模块中使用 Haskell 之类的 Prelude 模块

我正在编写一个包含某些部分的绘图包,并且我的运算符和数据类型分散在整个过程中。但是我不希望用户每次都添加相应的模块,因为它会非常混乱,例如我在不同的路径中有一个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)

haskell raku

11
推荐指数
1
解决办法
153
查看次数

将类的运算符定义与其他文件分开并使用它们

我有4个文件都在同一个目录下:main.rakumodinfix_ops.rakumodprefix_ops.rakumodscript.raku

  • main模块有一个类定义 ( class A)
  • *_ops模块有一些运算符例程定义要编写,例如,$a1 + $a2以重载的方式。
  • script.raku尝试A实例化对象并使用那些用户定义的运算符。

为什么是 3 个文件而不是 1 个?由于类定义可能很长,并且在文件中分离重载的运算符定义似乎是编写更整洁代码(更易于管理)的好主意。

例如,

# main.rakumod
class A {
    has $.x is rw;
}
Run Code Online (Sandbox Code Playgroud)
# prefix_ops.rakumod
use lib ".";
use main;

multi prefix:<++>(A:D $obj) {
    ++$obj.x;
    $obj;
}
Run Code Online (Sandbox Code Playgroud)

和类似的例程infix_ops.rakumod。现在,在 中script.raku,我的目标是仅导入主模块并查看也可用的重载运算符:

# script.raku
use lib ".";
use main;

my $a = A.new(x => -1);
++$a;
Run Code Online (Sandbox Code Playgroud)

但它自然不会看到++多个A对象,因为 …

raku

9
推荐指数
1
解决办法
118
查看次数

标签 统计

raku ×2

haskell ×1