d的异常2

原文
添加环境信息到可能无法访问传播异常的抛代码中.
是的,但可再次这样:抓一个,然后抛新的,并把旧的放在后面.
是的.但是,必须在每个可能想要添加环境信息的潜在抽象级别周围插入try/catch语法很痛苦.如果在战略入口点,用可插入的包装器,就更好了.如下?

// 幻想的,假设的语法
auto myFunc(Args...)(Args args) {
    int additionalInfo = 123;
    scope(failure, additionalInfo);

    return runUnreliableOperation(args);
}

域共享析构器,可以这样:

struct AdditionalInfo {
    static string[] info;

    this(string info) {
        AdditionalInfo.info ~= info;
    }

    ~this() {
        AdditionalInfo.info = AdditionalInfo.info[0 .. $ - 1];

    }

    @disable this(this);
}

class AdditionalInfoException : Exception {
    this(string t) {
        import std.string;
        super(t ~ "\n" ~ AdditionalInfo.info.join(" "));
    }
}

void bar() {
    with(AdditionalInfo("zone 1")) {
        with(AdditionalInfo("zone 2")) {
        }
        throw new AdditionalInfoException("info");
    }
}

void main() {
    bar();
}

抛出点需要与之合作,但仍然可以试/抓整个操作,并附加原始异常到新异常中.最大的问题仍然是串类型,呃.
通过编译器,可在异常处理元数据中附加函数级别信息,因此就像生成栈跟踪一样查找它.但仅限于函数级.但是,有嵌套函数.

posted @   zjh6  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示