Scala. Obtenir le premier élément de la Liste
Pourquoi ne queue.get(
) de retour à vide de la liste?
class MyQueue{
var queue=List[Int](3,5,7)
def get(){
this.queue.head
}
}
object QueueOperator {
def main(args: Array[String]) {
val queue=new MyQueue
println(queue.get())
}
}
Comment je peux obtenir le premier élément?
- Lors de votre apprentissage, vous trouverez peut-être utile d'écrire explicitement plus de types que le nécessaire. Dans ce cas, si vous avais écrit
def get(): Int { this.queue.head }
le compilateur aurait dit il y a un problème avec laget
méthode.
InformationsquelleAutor user2009490 | 2013-08-25
Vous devez vous connecter pour publier un commentaire.
Ce n'est pas de retourner la liste vide, il est de retour
Unit
(un zéro-tuple), qui est Scala est l'équivalent devoid
en Java. Si c'était le retour de la liste vide, vous verriezList()
imprimé à la console plutôt que de la()
(nullary tuple).Le problème est que vous utilisez la mauvaise syntaxe pour votre
get
méthode. Vous devez utiliser un=
pour indiquer queget
renvoie une valeur:Ou c'est probablement encore mieux:
En Scala vous l'habitude de laisser hors des parenthèses (liste de paramètres) pour nullary fonctions qui n'ont pas d'effets secondaires, mais cela vous oblige à quitter les parenthèses off lorsque vous appelez
queue.get
ainsi.Vous voudrez peut-être jeter un coup d'œil rapide sur la Scala Guide De Style, plus précisément le la section sur les méthodes.
def proc(...) { ... }
en faveur de la pleine formedef proc(...): Unit = { ... }
. Voir groups.google.com/forum/?fromgroups=#!topic/scala-débat/...Parfois, il peut être bon d'utiliser
prendre 1
au lieu de la tête parce que ça ne marche pas à cause d'une exception sur vide listes et retourne de nouveau une liste vide.
headOption
est mieux, parce qu'il ne veut pas utiliser de la magie des constantes (1), et il renvoie un type (Option[T]
) qui est statiquement garantis d'être de taille maximale 1.