9
votes

Archauffes scala vs vecteurs

Scala Newb ... Je suis confus

object myApp extends App {
  println("Echo" + (args mkString " "))
}


0 commentaires

3 Réponses :


17
votes

Je ne suis pas un expert Scala (loin de là!) Mais je pense que la réponse est la réponse implicite (voir scala.predef ) et wraparray.scala.

En particulier, PREDEF a La conversion implicite suivante: xxx

et wraparray a une méthode mkstring. Lorsque SCALA ne peut pas trouver une méthode mkstring sur la matrice, elle cherche une conversion implicite sur un type qui fait.

http://www.scala-lang.org/api/current/scala/predef $ .html

http://www.scala-lang.org/api/current/scala/ Collection / mutable / wradafry.html


1 commentaires

Merci, je n'avais pas la tête des conversions implicites. Wrapaparray et Vector Obtenez la méthode Mkstring à partir du trait TraversableVerce qu'ils partagent. Peut-être utile si Scaladoc vous a dit dans la définition d'une classe ce que les défenseurs implicites existaient?



12
votes

Élargir sur la réponse de Kevin et expliquer pourquoi il n'est peut-être pas que pour Scaladoc vous dire quelle conversion implicite existe: les conversions implicites entrent en jeu lorsque votre code ne compilerait pas autrement.

Vous pouvez voir En tant que mécanisme de récupération d'erreur pour les erreurs de type activés lors de la compilation. Dans ce cas, array [string] n'a pas de méthode mkstring . Ce code ne compilerait pas, car cette méthode n'existe pas sur Array [t] . Mais avant d'abandonner le compilateur cherchera une conversion implicite dans la portée.

Il arrive que Predef apporte un certain nombre de conversions implicites dans la portée et une application qui s'appliquera ici.

Découvrez quelle conversion implicite s'applique peut être effectuée en compilant avec le drapeau -XPrint: TYPER . Dans ce cas, il imprimerait: xxx

afin que vous puissiez voir que pref.refarrayops est en fait la conversion implicite utilisée. Il convertit votre tableau en un Arrayops [stress] qui a un mkstring méthode .

donc avec ça Dans l'esprit, vous pouvez voir pourquoi scaladoc pour tableau ne peut pas vous dire quelle conversion implicite pourrait s'appliquer. Cela pourrait être n'importe quoi. Il est en fait totalement basé sur le fait qu'il n'y a pas de méthode de ce type. Seul le compilateur saura ce que l'implicite a trouvé sur la base du code.

Vous pouvez même définir votre propre conversion implicite: xxx

qui aurait le suivant Effet: xxx

évidemment scaladoc ne sera pas capable de montrer cela. Notez que le bouchon Eclipse Scala peut vous amener à la mise en oeuvre de mkstring en appuyant sur F3 (vous allez vous retrouver dans TraversableOnce ).


1 commentaires

Merci pour l'explication détaillée :)



2
votes

Mais Scaladoc pourrait au moins dire que Prefef (qui est spécial parce qu'il est toujours dans la portée) a une conversion implicite de la matrice. Ce serait utile.


0 commentaires