web-dev-qa-db-fra.com

Scala. Obtenir le premier élément de la liste

Pourquoi queue.get() retourner une liste vide?

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 obtenir le premier élément?

26
user2009490

Il ne renvoie pas la liste vide, il renvoie Unit (un zéro-Tuple), qui est l'équivalent de Scala de void en Java. S'il renvoyait la liste vide, vous verriez List() imprimé sur la console plutôt que () (Tuple nul).

Le problème est que vous utilisez la mauvaise syntaxe pour votre méthode get. Vous devez utiliser un = pour indiquer que get renvoie une valeur:

def get() = {
  this.queue.head
}

Ou c'est probablement encore mieux:

def get = this.queue.head

Dans Scala vous laissez généralement les parenthèses (liste de paramètres) pour les fonctions nullary qui n'ont pas d'effets secondaires, mais cela vous oblige à laisser les parenthèses lorsque vous appelez queue.get ainsi que.

Vous voudrez peut-être jeter un coup d'œil sur le Scala Style Guide , en particulier le section sur les méthodes .

35
DaoWen

Parfois, il peut être bon d'utiliser

prendre 1

au lieu de head car il ne provoque pas d'exception sur les listes vides et renvoie à nouveau une liste vide.

2
hendrik