J'ai une fonction simple dépend de la valeur de la fonction Agrumule Type d'argument [T] Ne pas conforme à la méthode Paramètre de type Toarray
limites [B>: Tout] p>
blockQuote> Merci d'avance p> p>
3 Réponses :
Si vous souhaitez revenir un type ou em> l'autre, vous devez utiliser strong> . def test(param: Boolean): Either[Array[String], Array[(Int, Int]]] =
if (param) Left((0 to 20).map(_.toString).toArray)
else Right((0 to 20).map(v => v -> v).toArray)
Je sais ce qui est soit ... Ma question n'est pas ce que je devrais utiliser mais pour comprendre comment cela fonctionne. Si je veux revenir un type ou un autre, soit le troisième deux? (sur les tableaux 0.to (n) .toarray fonctionne 2 fois plus vite que Tolist)
@Dmittryreutov Qu'est-ce que tu veux exactement comprendre? Le compilateur doit vérifier que votre problème est correct. Une compilée.Time propriété, comme le type de retour d'une méthode ne peut pas dépendre d'une valeur d'exécution. Il existe de nombreuses solutions à cette situation, mais toutes les personnes dépendent de ce que vous voulez exactement, sur la façon dont vous voulez utiliser votre fonction. - Enfin, sur la performance, de tolist code> vs toarray code> dans la plupart des cas qui ne devraient pas vous inquiéter, mais je ne vais pas aller au trou de lapin de cette discussion, car Cette raison pour laquelle je me limitais à utiliser Array B> comme vous le souhaitez.
Luis, je veux juste la réponse directe à ma question directe ... L'un de l'autre exemple comment puis-je convertir du tableau [string] au tableau [T] ou indiquer le fait qu'une telle conversion n'est pas possible ... c'est ça ... oui Il y a beaucoup de solutions à cette situation et inspit que je suis nouveau à Scala, je peux trouver 2 ou 3 moi-même, mais je voulais juste comprendre [t] problème de problème
@Dmittryreutov Non, vous ne pouvez pas (en toute sécurité) i> Caster un Array [string] code> à un tableau (t] code> car t B> Peut être n'importe quoi, et c'est en contrôle de l'utilisateur. Tout aussi clair que ça. Scala est un Statiquement B> & Strong B> Langue dactylographiée, ce n'est pas Python B> ou JavaScript B> où les types sont dynamiques et plus faibles . Donc, non, votre code tel qu'il est écrit n'a pas de sens. Cependant, ce que j'essaie de faire est de vous expliquer, qui basé sur vos exigences exactes, il existe des moyens de refroidir la fonction pour le rendre compilation et exprimer votre intention.
Essayez type littérale singleton type em> comme suggéré par KRZYSZTOF comme quelle sortie p>
Merci, c'est une option amusante, mais toujours deux choses restent: 1) Il y a beaucoup de code à l'intérieur de la boucle que je ne veux pas dupliquer, mais si vous le déplacez à une fonction séparée, puis à nouveau le même problème avec les types ou je devrais en quelque sorte casser le code Pour taper des parties dépendantes / indépendantes qui n'est pas très belle ... mais ce genre de choses que je peux résoudre 2) une autre chose - je passe pour fonctionner non seulement faux ou vrai, mais un objet avec 5 cas étendus, 2 d'entre eux devraient invoquer le premier type , un autre type de 3 secondes. Oui, je peux créer 5 funcs différents mais cela devient un peu compliqué. Quoi qu'il en soit, l'exemple est précieux, merci!
@DMITRYREUTEV Ce serait bien si vous pouvez ouvrir une nouvelle question expliquant votre problème en détail afin que nous puissions fournir diverses solutions, chacune avec leurs compromis.
Remarque: le code suivant ne fonctionne que dans doty (c'est-à-dire scala 3.0):
Je crois en Scala 3 Il serait préférable d'utiliser une méthode en ligne pour cela.
Et si j'appelle
test [zoneddateTime] (param = true) code> Comment la chaîne serait-elle convertie par magiquement à un ZonedDateTetime b>?@ Luismiguelmejíasuárez, donc je ne peux pas utiliser [t] arguments en mai?
Que voulais-tu exactement? Vous souhaitez revenir strings b> si le paramètre est
true code> et intens b> sifalse code>, non? En outre, toute raison d'utiliser Tableaux b>? Ceux-ci sont généralement réservés aux algorithmes sensibles à la performance, comme ils sont dangereux, vous devez généralement utiliser des structures de données immuables telles que Liste B> ou Vecteur B>.