Pourquoi des parenthèses ?
Voici la citation du livre programmation en scala .
Une autre idée importante illustrée par cet exemple vous permettra de comprendre pourquoi les tableaux sont accessibles avec des parenthèses en Scala. Scala a moins de cas particuliers que Java. Les tableaux sont simplement des instances de classes, comme toute autre classe en Scala. Lorsque vous appliquez des parenthèses entourant une ou plusieurs valeurs à une variable, Scala transformera le code en une invocation d'une méthode nommée apply sur cette variable. Ainsi, greetStrings(i) est transformé en greetStrings.apply(i). Ainsi, l'accès à un élément d'un tableau en Scala est simplement un appel de méthode comme un autre. Ce principe n'est pas limité aux tableaux : toute application d'un objet à certains arguments entre parenthèses sera transformée en un appel de méthode apply. Bien sûr, cela ne compilera que si ce type d'objet définit effectivement une méthode apply. Il ne s'agit donc pas d'un cas particulier, mais d'une règle générale.
Voici quelques exemples de la façon de tirer un certain élément (le premier élément dans ce cas) en utilisant le style de programmation fonctionnelle.
// Create a multdimension Array
scala> val a = Array.ofDim[String](2, 3)
a: Array[Array[String]] = Array(Array(null, null, null), Array(null, null, null))
scala> a(0) = Array("1","2","3")
scala> a(1) = Array("4", "5", "6")
scala> a
Array[Array[String]] = Array(Array(1, 2, 3), Array(4, 5, 6))
// 1. paratheses
scala> a.map(_(0))
Array[String] = Array(1, 4)
// 2. apply
scala> a.map(_.apply(0))
Array[String] = Array(1, 4)
// 3. function literal
scala> a.map(a => a(0))
Array[String] = Array(1, 4)
// 4. lift
scala> a.map(_.lift(0))
Array[Option[String]] = Array(Some(1), Some(4))
// 5. head or last
scala> a.map(_.head)
Array[String] = Array(1, 4)
2 votes
Eh bien, il semble que données.tête a fonctionné... Mais cela ne me donne que le premier élément, pas n'importe lequel de la liste.
0 votes
Utilisez le Seq traits apply(index) si vous êtes sûr que l'indice n'est pas hors limites. _scala-lang.org/api/current/_
0 votes
Data.drop(i).head fonctionne pour accéder au i-ième élément
0 votes
@Vinay C'est une opération coûteuse. Il faut donc éviter "drop(i).head".