返回不同類型如果我評價斯卡拉REPL下面的表達式:斯卡拉非常類似的表述
scala> "1" + 1
res0: java.lang.String = 11
返回類型爲:java.lang.String中。
如果我評價這種類似的表達:
scala> 1 + "1"
res1: String = 11
返回類型爲:字符串。
爲什麼區別?
返回不同類型如果我評價斯卡拉REPL下面的表達式:斯卡拉非常類似的表述
scala> "1" + 1
res0: java.lang.String = 11
返回類型爲:java.lang.String中。
如果我評價這種類似的表達:
scala> 1 + "1"
res1: String = 11
返回類型爲:字符串。
爲什麼區別?
沒有區別,但它也不是一個錯誤。在這種情況下:
"1" + 1
您正在使用Java的內置功能將任何內容連接到字符串中。畢竟,許多人將數字轉換到使用下面的「成語」的字符串:
String s = "" + 5;
它工作在斯卡拉以及和結果與java.lang.String
- 相同的Java。
在另一方面:
1 + "1"
是一個有點複雜。這個被翻譯成:
1.+("1")
和+()
方法是從Int.+
方法位於Int.scala
採取:
final class Int extends AnyVal {
//....
def +(x: String): String = sys.error("stub")
的String
在此上下文中在Predef.scala
定義:
type String = java.lang.String
其是類型的來源「區別「。正如你可以看到這兩個字符串實際上是相同的類型。
"1"+1
調用java.lang.String的operator +,1+"1"
調用由scala運行時定義的運算符+(現在無法找到它),因此它返回一個scala字符串。
相似問題:http://stackoverflow.com/questions/6559938/scala-string-vs-java-lang-string-type-inference – 2012-01-30 14:51:58
都在Scala 2.10中返回'String'。 – soc 2012-01-30 15:25:34