【问题标题】:Why Scala last val is not the return value? [duplicate]为什么Scala last val 不是返回值? [复制]
【发布时间】:2018-04-07 23:08:06
【问题描述】:

通常,在 Scala 中,返回值时不需要 return 关键字,最后一个值始终是返回值。

例如:

  def sum(a: Int, b: Int): Int = {
    a + b
  }

将返回和Inta+b

但是,为什么将总和分配给另一个 val 时,它不会被视为返回值?

例如:

  def sum(a: Int, b: Int): Int = {
    val sum = a + b
  }

将显示类型不匹配错误(预期为Int,得到Unit)。这种行为背后的原因/逻辑是什么?

编辑:正如我从 cmets 和答案中了解到的,不是 Scala last val 不是返回值,而是返回值。但是,val 赋值返回 Unit 而不是分配的类型。原因是:What is the motivation for Scala assignment evaluating to Unit rather than the value assigned?

【问题讨论】:

  • 您能解决您遇到的错误吗??
  • 感谢您的评论。这是类型不匹配的已知错误/行为。最后一个 val 不被视为返回值。我很好奇这种行为的原因。
  • 打字机推理错误??编译器如何将 Unit 转换为 Int?
  • 最后一个表达式是返回值,但是val sum = a + b的类型是Unit,而你声称返回类型是Int
  • 但是sumInt。为什么它不会用作返回值?这是最后一个...

标签: scala


【解决方案1】:

因为 Scala 中的赋值计算结果为 Unit,可以证明:

Welcome to Scala 2.12.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_112).
Type in expressions for evaluation. Or try :help.

scala> val y = { val x = 4 }
y: Unit = ()

请注意,这与 Java 不同:

jshell> int x, y
x ==> 0
y ==> 0

jshell> x = (y = 4)
x ==> 4

为什么 scala 选择了这个has been answered before

【讨论】:

  • 虽然相关,但我认为 Java 示例 x = (y = 4) 与 Scala val y = { val x = 4 } 不同。 Java int y = 4 甚至不是表达式,它肯定不会返回 y 的值。
  • 谢谢,您链接到的答案正是我所需要的。我已经详细阐述了表达这种知识的 q 和我困惑的根源。 stackoverflow.com/questions/1998724/…
  • @Suma - 我不太明白你的意思;我什么时候写的int y = 4
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-24
  • 1970-01-01
相关资源
最近更新 更多