Je voudrais créer un stockage pour le type suivant: mais si je fais ce qui suit: p> alors Crée comme liste [Anyval] et me donne une erreur si j'essaie d'effectuer une opération mathématique: P> y(0)(0) * 2 // Error - value '2' is not a member of AnyVal
5 Réponses :
Vous pouvez trouver ce lien utile: http://debasishg.blogspot.com/ 2009/01 / supérieure-ordres-abstractions-in-scala-with.html
du lien ci-dessus Voici un exemple de liste des listes: P>
var y : List[List[Float]] = ...
Couple de remarques: Signification, comme la question " Java: ma méthode veut le double type au lieu de flotter? ": P> Le 'F' à la fin du nombre en fait un flotteur au lieu d'un double. fonctionne trop p> Il suffirait d'ajouter le type explicite ne suffirait pas: P>
Java ne ménagera pas automatiquement un double à un flotteur. P>
blockquote>
scala> var f : Float = -2.1
<console>:4: error: type mismatch;
found : Double(-2.1)
required: Float
var f : Float = -2.1
^
scala> var f : Float = -2.1f
f: Float = -2.1
Dans vos deux exemples une liste, une liste contient un numéro d'int (1 dernier dans le premier cas et 2 comme premier élément de la deuxième liste), le reste des numéros est double. Par conséquent, le type déduit des éléments de liste sera anyval, qui est le premier Superype commun d'eux, de sorte que votre liste extérieure deviendra liste [Liste [Anyval]]. P>
Si vous l'essayez également avec SCALA 2.8, il devrait utiliser Numérique au lieu de Anyval, car il est devenu le Superype de double et d'int. Les opérations les plus numériques (multiplication dans votre cas) y travailleront également sur eux. P>
Pour résoudre votre problème avec 2.7.x Utilisez simplement des doubles pour ces valeurs (1.0 ou 1D). P>
déclarer explicitement le type comme liste [liste [double]] aidera également également. Dans ce cas, les valeurs INT que vous avez données seront converties en doubles. P>
var y:List[List[Double]] = List(List (1.0, 2.2), List(2, 1.1, -2.1)) y(0)(0)*2
Cela semble avoir été corrigé dans SCALA 2.9
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_22). Type in expressions to have them evaluated. Type :help for more information. scala> var y = List(List (1.0, 2.2), List(2, 1.1, -2.1)) y: List[List[Double]] = List(List(1.0, 2.2), List(2.0, 1.1, -2.1)) scala> y(0)(0) * 2 res0: Double = 2.0