小编Raw*_*ler的帖子

如果未安装模块,如何使 Raku 测试成为可选

我正在向一个包添加一个功能,该功能可以选择使用DBIish. 我想编写一些单元测试以确保功能正常工作。但是,DBIish它应该是一个可选的依赖项,这意味着您不需要它来安装或使用该包。DBIish如果用户没有安装,如何跳过测试DBIish

就像是:

{
    require ::('DBIish');
    CATCH {
        default {
            skip-testing;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

...将是理想的,但可选的测试标志也可以工作,但我似乎找不到有关该主题的任何文档。

raku

8
推荐指数
1
解决办法
111
查看次数

如果模块已在项目中定义,如何在 Raku 项目中使用多个模块?

我正在尝试用 Raku 编写模块,当时将一个功能分解到另一个.rakumod文件中对我来说是有意义的。编译时如何将这些文件链接在一起?

我尝试通过以下方式将其他模块拉到我的主模块:

use MyProject::OtherModule;
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误,即使它们并排在目录中,它也找不到此模块。我尝试查看 Raku 世界中的一些 OSS 项目,其中大多数都是一个文件,编译器 Rakudo 似乎使用多个模块文件,但我不知道它们是如何链接的。

每次我想运行我的项目时都必须发布这个模块吗?如果我的项目变得很大,我该如何构建它?当然,最好的解决方案不是将所有内容都放在一个文件中吗?

编辑:我还应该注意,我也在新模块的顶部使用了它:

unit module MyProject::OtherModule;
Run Code Online (Sandbox Code Playgroud)

rakudo raku

6
推荐指数
1
解决办法
173
查看次数

如何从本机调用返回 Hash/Raku 对象?

我正在编写一个使用 的库NativeCall,如果能够Hash从导出函数返回 Raku 对我来说会非常方便。我怎样才能做到这一点?

例如,在 Ruby 中,如果我想Hash从 C 返回 a,我会这样做:

#include "ruby.h"

VALUE make_hash() {
    VALUE hash = rb_hash_new();
    return hash;
}
Run Code Online (Sandbox Code Playgroud)

我有兴趣看看这是否可以完成,我在想也许我需要使用 MoarVM 标头或其他东西。但我不确定。

我想做的是编写一个 C 函数,它接受一个 String 来做一些事情,然后返回一个 Raku 哈希。

moarvm raku

6
推荐指数
2
解决办法
225
查看次数

在并行环境中没有互斥锁的情况下 ref 是否可以安全使用

我正在使用该库编写一个相当异步的程序Thread。我将有很多不同的线程需要访问string list ref,如果不使用 a ,这安全吗Mutex?我今天早些时候了解到这Hashtbl需要 a Mutex,但我找不到有关 的任何信息ref

ocaml mutex

5
推荐指数
1
解决办法
97
查看次数

为什么 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
查看次数

如何检查参数是否是子程序?

如何测试给定参数是否是子程序?

例如:

sub foo {
    my $bar = shift;
    if (is_subroutine($bar)) {
        return &$bar();
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

我会这样称呼它:

foo(sub { print "Hi!" }); # prints "Hi!"
foo(123); # Nothing
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

perl

3
推荐指数
1
解决办法
119
查看次数

什么是 :> 运算符?

当我浏览Dream源代码时,我偶然发现了一个我以前从未见过的运算符(可能在包中定义):

let method_ =
  match (method_ :> Method.method_ option) with
  | None -> `GET
  | Some method_ -> method_
Run Code Online (Sandbox Code Playgroud)

运算符是什么:>,它从哪里来,它有什么作用?

ocaml

2
推荐指数
1
解决办法
77
查看次数

为什么函数模式匹配不起作用,而显式模式匹配却起作用?

我编写了一个函数,它接受一个数字,并返回该数字的负数版本。如果传递的数字为负数,则仅返回该数字。make_negative :: int -> int

我的第一个实现如下:

let make_negative x =
  match x with
  | 0 -> 0
  | y when y < 0 -> y
  | y when y > 0 -> -y
Run Code Online (Sandbox Code Playgroud)

当我看到这个模式时,我想我可以用以下模式替换它:

let make_negative_two =
  | 0 -> 0
  | x when x < 0 -> x
  | x when x > 0 -> -x;;
Run Code Online (Sandbox Code Playgroud)

但是,我看到以下错误:syntax error: expecting expr.

ocaml

0
推荐指数
1
解决办法
115
查看次数

标签 统计

raku ×4

ocaml ×3

moarvm ×1

mutex ×1

perl ×1

rakudo ×1

unicode ×1

utf-8 ×1