gpt4 book ai didi

scala - 具有匿名函数和占位符的 val 和 var 的不同行为

转载 作者:行者123 更新时间:2023-12-04 13:18:25 25 4
gpt4 key购买 nike

带有 val 和 var 的代码:

val adder: Int => Int = _ + 3 // Works fine
var adder: Int => Int = (_ + 3) // Works fine
var adder: Int => Int = _ + 3 // Error (using var, but not brackets)

带有 var 的最后一行的错误消息:

';' expected but identifier found.



什么可以解释 val 和 var 变体之间的行为差​​异?

最佳答案

在 Scala 中,下划线的用途之一是允许用户在 var 中设置默认初始值。定义(见 the spec 的第 4.2 节):

scala> var x: String = _
x: String = null

scala> var y: Int = _
y: Int = 0

您看到的问题似乎是紧跟在 = 之后的下划线。在 var定义被解释为这个特殊的默认初始值,并且不考虑在函数中作为占位符的替代使用。

在我看来,这种行为一定是一个错误。我很确定规范不能证明它是合理的,期望编译器考虑 _ 的两种语法用法似乎是很合理的。 .不过,乍一看,我无法提出问题。如果您在乎,可以尝试自己报告。

由于您实际上并没有提出问题,因此我只是猜测哪些信息会对您有所帮助。您可能不是在询问解决方法,因为您在第二行中有一个,所以您可能只是想知道这是怎么回事,在这种情况下,答案是 Scala 编译器仍然是一种在某些方面,特别是在较少使用或关心的语言领域(如 var 定义)。

关于scala - 具有匿名函数和占位符的 val 和 var 的不同行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55182423/

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