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(';'));
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现