我最近开始使用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