gpt4 book ai didi

java - Scala 为非常相似的表达式返回不同的类型

转载 作者:搜寻专家 更新时间:2023-10-31 08:13:59 26 4
gpt4 key购买 nike

如果我在 Scala REPL 中计算以下表达式:

scala> "1" + 1
res0: java.lang.String = 11

返回的类型是:java.lang.String

如果我计算这个相似的表达式:

scala> 1 + "1"
res1: String = 11

返回的类型是:String

为什么不同?

最佳答案

没有区别,但也不是错误。在这种情况下:

"1" + 1

您正在使用 Java 的内置功能将任何内容连接成一个字符串。毕竟,许多人使用以下“成语”将数字转换为字符串:

String s = "" + 5;

它也可以在 Scala 中使用,并使用 java.lang.String 产生结果 - 与在 Java 中相同。

另一方面:

1 + "1"

有点复杂。这被翻译成:

1.+("1")

+() 方法取自 Int.scala 中的 Int.+ 方法:

final class Int extends AnyVal {
//....
def +(x: String): String = sys.error("stub")

此上下文中的String定义在Predef.scala中:

type String        = java.lang.String

这是“差异”类型的来源。如您所见,这两个字符串实际上是同一类型。

关于java - Scala 为非常相似的表达式返回不同的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9065549/

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