gpt4 book ai didi

Java 语言规范 : LambdaExpression in Java ConditionalExpression

转载 作者:行者123 更新时间:2023-11-30 08:34:07 26 4
gpt4 key购买 nike

在 Java 8 规范中有以下 syntax description of the conditional operator ?: :

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
ConditionalOrExpression ? Expression : LambdaExpression

我理解前两行。但是为什么第三行是必要的呢? LamdaExpression 有什么特别之处需要在这里明确声明?我没有在以下文本中看到这一点。

最佳答案

我想我知道答案了,但这很奇怪。

这是第 15 章的引述:

Precedence among operators is managed by a hierarchy of grammar productions. The lowest precedence operator is the arrow of a lambda expression (->), followed by the assignment operators. Thus, all expressions are syntactically included in the LambdaExpression and AssignmentExpression nonterminals:

Expression: LambdaExpression AssignmentExpression

ConditionalExpression 是 AssignmentExpression 的一部分:

AssignmentExpression: ConditionalExpression Assignment

正如您所说,ConditionalExpression 的第三部分只能是一个ConditionalExpression,而不是一个Expression

将第三部分变成 Expression 会包含不需要的东西,比如 Assignment:

a? b : c=d // bad idea?

但是,将第三部分限制为 ConditionalExpression 而不是 Expression 遗漏了 LambdaExpression,所以现在需要使用

ConditionalOrExpression ? Expression : LambdaExpression

这实际上带来了下一个问题:为什么Assignment在条件表达式的第二部分可以,但在第三部分却不行?

关于Java 语言规范 : LambdaExpression in Java ConditionalExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39044451/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com