我最近開始使用Scala(2.8)玩,注意到我可以寫下面的代碼(在斯卡拉解釋):Scala:爲什麼我可以將Int轉換爲Unit?
scala> var x : Unit = 10
x : Unit =()
這不是很明顯這是怎麼回事那裏。我真的沒想到會看到任何隱含的轉換到單位。
我最近開始使用Scala(2.8)玩,注意到我可以寫下面的代碼(在斯卡拉解釋):Scala:爲什麼我可以將Int轉換爲Unit?
scala> var x : Unit = 10
x : Unit =()
這不是很明顯這是怎麼回事那裏。我真的沒想到會看到任何隱含的轉換到單位。
看到2.8版本Scala Language Specification部分「6.26.1價值的轉換」:
...
價值丟棄。如果e
具有一定的值類型和預期的類型爲單位,e
通過在術語{ e;() }
嵌入它轉換 到預期的類型。
...
那麼,什麼都可以轉化成單元(這是它的目的)。你可以把單位看作(子)類型的單位,這意味着它是一切的超類型。見Wikipedia article。
任何事情都可以轉換爲單位。這主要是支持副作用方法所必需的,但副作用方法的返回值往往被忽略。例如
import java.util.{List =>JList}
def remove2[A](foo: JList[A], a1:A, a2:A):Unit = {
foo.remove(a1)
foo.remove(a2) //if you couldn't convert the (usually pointless) return value of remove to Unit, this wouldn't type
}
注意,您可以通過使用'scalacOptions + =「-Ywarn價值,丟棄」'在SBT的配置彌補這方面的警告。 – VasyaNovikov 2016-09-15 14:31:09