【问题标题】:error: expected type 'type' -- while trying to return error from an error set错误:预期类型 'type' -- 在尝试从错误集中返回错误时
【发布时间】:2022-01-23 17:05:25
【问题描述】:

我是 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/ 在“错误”部分。我想尝试一下,所以出于好奇,我做了上面的事情。

【问题讨论】:

    标签: error-handling compiler-errors set unions zig


    【解决方案1】:

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

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

    【讨论】:

    • 好的,所以返回类型必须是错误集标识符,这样我可以指定并返回集中的任何一个错误。如果我错了,请纠正我。
    • 就是这样:当你在 comptime 指定返回 type, 时,你必须给出一个错误集(error { Oops } 形式的东西(或对一个的引用,就像你的 erro)。erro.Oops 是一个属于错误集的文字值,这就是你在运行时分配给变量或从函数返回的值。
    猜你喜欢
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2014-09-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-02
    相关资源
    最近更新 更多