我最近开始使用Scala(2.8)玩,并注意到我可以编写以下代码(在Scala解释器中):

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

目前发生了什么事。我真的没想到会看到任何隐含的转换 单元.

有帮助吗?

解决方案

请参阅部分 “ 6.26.1价值转换” 在里面 Scala语言规范 版本2.8:

...

丢弃价值。 如果 e 具有某种值类型,预期类型是单位, e 通过嵌入期将其转换为预期类型 { e; () }.

...

其他提示

任何东西都可以转换为单位。这是支持副作用方法的主要必要条件,这些方法仍然返回值,但通常会忽略返回值。例如

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
}

好吧,任何东西都可以转换为单位(这是其目的)。您可以将单位视为(sub)类型的晶格中的单位,这意味着它是所有事物的超级模式。看 维基百科文章.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top