2010-08-18 71 views
19

我最近開始使用Scala(2.8)玩,注意到我可以寫下面的代碼(在斯卡拉解釋):Scala:爲什麼我可以將Int轉換爲Unit?

scala> var x : Unit = 10 
x : Unit =() 

這不是很明顯這是怎麼回事那裏。我真的沒想到會看到任何隱含的轉換到單位

回答

30

看到2.8版本Scala Language Specification部分「6.26.1價值的轉換」

...

價值丟棄。如果e具有一定的值類型和預期的類型爲單位,e通過在術語{ e;() }嵌入它轉換 到預期的類型。

...

+0

注意,您可以通過使用'scalacOptions + =「-Ywarn價值,丟棄」'在SBT的配置彌補這方面的警告。 – VasyaNovikov 2016-09-15 14:31:09

0

那麼,什麼都可以轉化成單元(這是它的目的)。你可以把單位看作(子)類型的單位,這意味着它是一切的超類型。見Wikipedia article

+2

我不清楚你到底在說什麼:單元實際上並不是Scala類型網格中的最小元素,它是Any類型。 單位實際上並沒有在斯卡拉任何亞型,據我所知,它被定義爲「最後一類單位擴展AnyVal」。上述 mkneissl的答案似乎給真正的原因,這個工程 - 隱式轉換。 您是指具體的說這(次)類型的點陣的東西嗎? – iainmcgin 2012-10-12 11:19:35

+1

這個答案是不正確的。 – Jubobs 2016-03-11 06:48:23

15

任何事情都可以轉換爲單位。這主要是支持副作用方法所必需的,但副作用方法的返回值往往被忽略。例如

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 
} 
相關問題