Итак, я пытался разобраться в различных способах определения вещей в Scala, осложненных отсутствием понимания того, как обрабатываются блоки {}
:
object NewMain extends Thing{
def f1 = 10
def f2 {10}
def f3 = {10}
def f4() = 10
def f5() {10}
def f6() = {10}
def f7 = () => 10
def f8 = () => {10}
def f9 = {() => {10}}
def main(args: Array[String]){
println(f1) // 10
println(f2) // ()
println(f3) // 10
println(f4) // 10
println(f4()) // 10
println(f5) // ()
println(f5()) // ()
println(f6) // 10
println(f6()) // 10
println(f7) // <function0>
println(f7()) // 10
println(f8) // <function0>
println(f8()) // 10
println(f9) // <function0>
println(f9()) // 10
}
}
Предположительно некоторые из них эквивалентны, некоторые из них являются синтаксическим сахаром для других, а некоторые - вещами, которые я не должен использовать, но я не могу для жизни понять это. Мои конкретные вопросы:
-
Как получается
println(f2)
иprintln(f5())
unit
? Не последний элемент в блоке10
? Чем он отличается отprintln(f3())
, который дает10
? -
Если
println(f5)
даетunit
, не долженprintln(f5())
быть недопустимым, так какunit
не является функцией? То же самое относится кprintln(f6)
иprintln(f6())
-
Из всех тех, которые печатают 10:
f1
,f3
,f4
,f4()
,f6
,f6()
,f7()
,f8()
,f9()
, существует ли какая-либо функциональная разница между ними (с точки зрения того, что она делает) или различия в использовании (с точки зрения того, когда я должен использовать это)? Или все они эквивалентны?