在读TypeScript源码时,发现一个很有意思的简写?:
return scriptInfo ?
? ? ? ? ? ? scriptInfo.getDefaultProject() :
? ? ? ? ? ? (this.logErrorForScriptInfoNotFound(isString(fileNameOrScriptInfo) ? fileNameOrScriptInfo : fileNameOrScriptInfo.fileName), Errors.ThrowNoProject());
注意return语句中第一层三目运算符最后面那部分,在里面直接在逗号运算符后面抛出了错误信息。
这段代码乍看有点不合常规,但是理解了逗号运算符的作用之后,就豁然开朗了,感觉用的很妙。
逗号运算符的作用:
?逗号运算符(,)
逗号(
,
)运算符对它的每个操作数从左到右求值,并返回最后一个操作数的值。这让你可以创建一个复合表达式,其中多个表达式被评估,复合表达式的最终值是其成员表达式中最右边的值。这通常用于为?for?循环提供多个参数。
其实上面那段代码所做的就是如果取不到默认项目,就在返回文件名称或脚本信息的同时抛出异常,终止程序执行。
完整代码如下:
private doEnsureDefaultProjectForFile(fileNameOrScriptInfo: NormalizedPath | ScriptInfo): Project {
this.ensureProjectStructuresUptoDate();
const scriptInfo = isString(fileNameOrScriptInfo) ? this.getScriptInfoForNormalizedPath(fileNameOrScriptInfo) : fileNameOrScriptInfo;
return scriptInfo ?
scriptInfo.getDefaultProject() :
(this.logErrorForScriptInfoNotFound(isString(fileNameOrScriptInfo) ? fileNameOrScriptInfo : fileNameOrScriptInfo.fileName), Errors.ThrowNoProject());
}
欢迎关注公众号:文本魔术,了解更多
?