我的主文件中有以下代码用于命令行应用程序:
dat <- data.frame(A = letters[1:5], X = 21:25)
table(dat$A, dat$X)
21 22 23 24 25
a 1 0 0 0 0
b 0 1 0 0 0
c 0 0 1 0 0
d 0 0 0 1 0
e 0 0 0 0 1
};
在此我得到以下编译器错误:
const init = async (): Promise<types.IContextObject> => {
let context: types.IContextObject;
try {
context = await createContext(dataObj);
} catch (e) {
dataObj.errors.insert({ message: e.message });
process.exit(1);
}
context.info.insert({
message: `Using Rules: `.bold + `${Object.keys(context.rules).join(', ')}`
});
return context;
如果我移动try块中的最后两行,我得到:
Variable 'context' is used before being assigned.
let context: types.IContextObject
答案 0 :(得分:3)
如果您将其置于试验范围之外,则无法保证该值存在。如果你把它放在try中,你必须提供第二个return方法,以便在try尝试失败时返回一些东西。
因此,要么为context
提供默认值,要么在底部提供默认的返回语句。这两种方法都可以。
答案 1 :(得分:1)
您的变量context
未在try块之外定义。移动插入并返回try块内部并在catch中返回null,或者在声明时将context
设置为null;但是,如果在catch语句之后没有进行适当的空值检查而执行后者,则在尝试访问info
时可能会出错。