d的自动域问题

原文

auto screen = executeShell(cmdLine);
auto s;//这样声明?
 //无法推导`"s"`的类型.
//从`getPath`的返回类型来看,可能是`string[]`.
//应该这样
string[] s;
...
{
    s = screen.output.findSplit("REG_SZ");
}

//但不编译.

string[] getPath(string cmdLine)
{
    auto screen = executeShell(cmdLine);

    if (screen.status != 0)
    {
        writeln(cmdLine, " failed");
    }
    else
    {
        writeln("screen.output = ", screen.output);
        auto s = screen.output.findSplit("REG_SZ");
        writeln("s[0] = ", s[0]);
        writeln("s[1] = ", s[1]);
        writeln("s[2] = ", s[2]);
    }
    return (s.split(';'));  // 未定义s
}

如何重构?
executeShell失败时会怎样?
a)这是错误;程序不应继续.可用'enforce'(这是我的编码方式):

string[] getPath(string cmdLine)
{
    import std.exception : enforce;

    auto screen = executeShell(cmdLine);
    enforce(screen.status == 0, format!"%s failed:\n%s"(cmdLine, screen.output));
//确保
    writeln("screen.output = ", screen.output);
    //后面略....
}

b)这不是错误;getPath()应该返回空数组:

string[] getPath(string cmdLine)
{
    string[] result;
    auto screen = executeShell(cmdLine);

    if (screen.status != 0)
    {
        writeln(cmdLine, " failed");
        return null;  // 在此(`无效`转数组)
    }
    else
    {
        // ...
        // 现在返回s定义的.
        return (s.split(';'));
    }
}
posted @   zjh6  阅读(8)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示