2010-08-18 38 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 
} 
相关问题