解析 API 函数中的冗余代码?
Redundant piece of code in parse APIs functions?
在研究一些解析API的过程中,我运行了解了一个常用的解析函数编写技巧:
final public Query parse() throws ParseException {
Query q;
// some parsing code using tokens here
{if (true) return q;}
throw new Error("Missing return statement in function");
}
我注意到许多解析器都在使用相同的语法 类
(即 org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser#TopLevelQuery &
让我很困惑,因为我无法得出一个具体的结论,为什么这段代码会这样写。
除了强调它必须始终return之外,还有什么隐藏的东西吗?
提前致谢,
自动生成的代码通常是正确的,但很难看起来优雅。在不担心优雅的情况下生成正确的代码已经足够困难了。
合理的猜测:{ 在那里是因为此时生成器不知道它是否需要它;它很快就会学会,但 "soon" 不是 "now"。 throw 在那里是因为此时生成器不确定它是否为 100% 的输入生成了 return 语句。
在研究一些解析API的过程中,我运行了解了一个常用的解析函数编写技巧:
final public Query parse() throws ParseException {
Query q;
// some parsing code using tokens here
{if (true) return q;}
throw new Error("Missing return statement in function");
}
我注意到许多解析器都在使用相同的语法 类
(即 org.apache.lucene.queryparser.flexible.standard.parser.StandardSyntaxParser#TopLevelQuery &
让我很困惑,因为我无法得出一个具体的结论,为什么这段代码会这样写。
除了强调它必须始终return之外,还有什么隐藏的东西吗?
提前致谢,
自动生成的代码通常是正确的,但很难看起来优雅。在不担心优雅的情况下生成正确的代码已经足够困难了。
合理的猜测:{ 在那里是因为此时生成器不知道它是否需要它;它很快就会学会,但 "soon" 不是 "now"。 throw 在那里是因为此时生成器不确定它是否为 100% 的输入生成了 return 语句。