Как правильно явным образом вернуть тип Unit
из метода, используя ()
или Unit
?Мне кажется, что оба работают во всех случаях, которые я пробовал сам.
Для контекста это часто происходит, если я пишу метод с побочными эффектами и возвращает Unit
, который вызывает другой метод, который такжевыполняет побочные эффекты, но возвращает некоторое значение вместо Unit
.Например,
def effectAndReturn(): String = {
val msg = "Hello, SO"
println(msg)
msg
}
def doEffect(): Unit = {
val _ = effectAndReturn()
() // `Unit` also works here
}
Насколько я понимаю, ()
является единственным значением типа 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
()
это просто значение Unit
, тогда как Unit
возвращает тип, который не имеет смысла для меня, поскольку никакие другие сопутствующие объекты не делают этого, насколько я могу судить.Я предполагаю, что компилятор обрабатывает Unit
особым и уникальным способом по сравнению с любым другим типом, но как именно?