在 IntelliJ 中评估返回值的表达式
Posted
技术标签:
【中文标题】在 IntelliJ 中评估返回值的表达式【英文标题】:Evaluate expression on return value in IntelliJ 【发布时间】:2021-12-22 10:15:01 【问题描述】:当我在 IntelliJ 调试器中右键单击返回值并选择“评估表达式”时,没有任何反应。
然后我必须切换到另一个堆栈帧并再次返回以使 Evaluate Expression 再次工作。
这是 Scala 代码。
如何评估引用返回值的表达式?调试器中的返回值名称不是合法标识符。
【问题讨论】:
请在youtrack.jetbrains.com/newIssue?project=IDEA报告错误。 @CrazyCoder 完成:youtrack.jetbrains.com/issue/IDEA-282255 【参考方案1】:在调试器中单击“返回值”并不清楚您的意思。
如果您在特定行上设置了断点,则该线程的执行将在该行执行之前停止。但是 Scala 不会将函数或块的返回值分配给任何特定的名称,因此不清楚“调试器中的返回值的名称”指的是什么。
如果您使用推荐的隐式返回样式,
def repeatUppercase(base: String, count: Int = 3): String =
val baseUpper = base.toUpperCase
val parts = List.fill(count)(baseUpper)
parts.mkString
并且你在块的最后一行放置了一个断点,然后你的调试器将显示名称base
、count
、baseUpper
和parts
,以及它们的值,当它停在那里时。如果将表达式 parts.mkString
粘贴到评估窗口中,它将评估表达式。如果您随后在调试器中前进,则返回值将被分配给在调用范围内分配给它的任何名称(除非调用范围丢弃返回值或匿名使用它)。
另一方面,如果你使用显式返回样式,
def repeatUppercase(base: String, count: Int = 3): String =
val baseUpper = base.toUpperCase
val parts = List.fill(count)(baseUpper)
return parts.mkString
那么你不能在 expression 求值器中计算 statement return parts.mkString
,因为语句不是表达式! (在函数定义之外,return 语句在语法上也是无效的。)
【讨论】:
另请注意,Scala 中的return
与 Java 中的含义不同,因此不应实际使用。
将最终表达式粘贴到评估对话框中有效,但它会重新执行表达式。如果它是一个没有副作用的纯函数表达式,例如parts.mkString
,这是安全的,但如果表达式需要很长时间重新评估,则可能会导致性能问题。所以我想在这种情况下,建议重构最后一行 - 如果它是可编辑的,而不是第三方库 - 首先将表达式的结果存储到 val
然后只返回 @ 987654332@.以上是关于在 IntelliJ 中评估返回值的表达式的主要内容,如果未能解决你的问题,请参考以下文章
JAVA语言中 有返回值的方法和无返回值的方法有啥区别啊 请举例子说明!!