Ala*_*mas 1 functional-programming scala
Unit从方法中显式返回类型的正确方法是什么,使用()或Unit?在我看来,在我尝试过的所有情况下,两者都有效.
对于上下文,如果我正在编写一个带副作用的方法并且返回Unit调用另一个方法,这也经常发生,这也会执行副作用但返回一些值而不是Unit.例如
def effectAndReturn(): String = {
val msg = "Hello, SO"
println(msg)
msg
}
def doEffect(): Unit = {
val _ = effectAndReturn()
() // `Unit` also works here
}
Run Code Online (Sandbox Code Playgroud)
从我的理解()是Unit存在的唯一类型的价值.返回令牌Unit中doEffect()所引用的Unit同伴对象; 我很困惑这将返回一个值,因为甚至没有apply定义一个方法.据我所知,返回给定抽象类的伴随对象的类型无效作为返回值.
将这些插入Scala REPL也很有趣
scala> val parenUnit = ()
parenUnit: Unit = ()
scala> parenUnit
// Returns blank line
scala> val wordUnit = Unit
wordUnit: Unit.type = object scala.Unit
scala> wordUnit
res1: Unit.type = object scala.Unit
scala> res1
res2: Unit.type = object scala.Unit
Run Code Online (Sandbox Code Playgroud)
()只是一个Unit值,而Unit给出一个类型,这对我没有意义,因为据我所知,没有其他伴侣对象这样做.我的猜测是,Unit与其他任何类型相比,编译器以特定且独特的方式处理,但具体如何呢?
所以,我们有:
Unit 类型()类型UnitUnit导致混淆的伴侣对象.它不是类型Unit.它是类型Unit.type(它自己的单例类型).但是...... Scala会自动隐式转换所有内容Unit,这就是为什么你可以在Unit预期类型的地方使用它.TLDR:使用 ()