J'ai donc essayé de puzzle à travers les différentes façons dont vous pouvez définir des trucs en Scala, compliquée par mon manque de compréhension de la façon dont {}
des blocs sont traités:
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
}
}
On peut supposer que certaines de ces équivalents, certains de ces sommes sucre syntaxique pour d'autres, et certains sont des choses que je ne devrais pas utiliser, mais je ne peux pas pour la vie de me comprendre. Mes questions spécifiques:
Comment est-ce que
println(f2)
etprintln(f5())
donneunit
? N'est pas le dernier élément dans le bloc10
? Comment est-il différent deprintln(f3())
, ce qui donne10
?Si
println(f5)
donneunit
, ne devriez -println(f5())
non valide, carunit
n'est pas une fonction? La même chose s'appliqueprintln(f6)
etprintln(f6())
De tous ceux qui imprimer 10:
f1
,f3
,f4
,f4()
,f6
,f6()
,f7()
,f8()
,f9()
, est-il une différence fonctionnelle entre eux (en termes de ce qu'elle fait) ou l'utilisation des différences (en termes de quand je devrais utiliser qui)? Ou sont-ils tous équivalents?