0

我是 Zig 的新手,正在尝试了解错误处理和错误集的工作原理。如果我跑

const erro = error{Oops};
fn failingFunction() erro.Oops!void {
    return erro.Oops;
}

test "returning an error" {
    failingFunction() catch |err| {
        try expect(err == erro.Oops);
        return;
    };
}

我收到一个错误:

error: expected type 'type', found 'erro'
fn failingFunction() erro.Oops!void {
                         ^
./test.zig:45:31: note: referenced here
fn failingFunction() erro.Oops!void {
                              ^
./test.zig:50:5: note: referenced here
    failingFunction() catch |err| {

但是当我使用erro!void而不是erro.Oops!void作为函数返回类型时,测试通过了。为什么会这样?请帮忙。错误联合在语言中是如何工作的?谢谢你。

编辑:以上是修改后的功能。原来的功能是

fn failingFunction() error{Oops}!void {
    return error.Oops;
}

来自这篇文章:https ://ziglearn.org/chapter-1/在“错误”部分。我想尝试一下,所以出于好奇,我做了上面的事情。

4

1 回答 1

1

failingFunction异常中,您传递了错误选项 ( Oops) 而不是错误类型。那是无用和错误的。用以下内容覆盖您的函数:

fn failingFunction() erro!void {
    return erro.Oops;
}
于 2022-01-23T18:42:41.213 回答