2015-03-29 2 views
1

Je suis en train de définir une méthode de Boo qui retourne deux choses, mais le compilateur est crachant le message:Syntaxe de type de retour multiple dans Boo?

attendant « COLON », a trouvé « ».

Voilà comment j'ai essayé de définir la méthode:

from System.Collections.Generic import HashSet 

# ValueParameter is a class defined elsewhere. 
def evaluate(s as string, limit as string) as double, HashSet[of ValueParameter]: 

Je l'ai regardé à travers les documents, et que je vois des exemples de la façon de renvoyer plusieurs articles, je ne vois pas d'exemples où ils déclarez le type de retour comme renvoyant plusieurs types.

Répondre

1

J'ai trouvé the swap example on the wiki, qui déclare une fonction qui utilise plusieurs valeurs de retour, et l'a exécuté dans le compilateur avec l'indicateur -p:boo, qui génère une représentation de code de la forme finale de l'AST après tout le traitement. Il signale que le type de cette fonction est (int). Lorsque vous renvoyez deux types dissemblables, tels que votre double et HashSet, le type de retour est (object).

+0

J'ai trouvé en réglant intentionnellement le type de retour de manière incorrecte (à 'chaîne ') et ayant alors le contenu de la fonction juste' retourner 12.3, HashSet [de ValueParameter]() 'et le compilateur a craché qu'il ne pouvait pas lancer' (object) 'à' string'. Le problème suivant a fini par être je ne pouvais pas trouver un moyen d'extraire le "double" ... Je pourrais le sortir comme un "objet", mais il ne me laisserait pas le transformer en "double" parce que c'est un 'Type de valeur 'ou autre. J'ai donc repensé la méthode et l'ai modifiée pour accepter une 'HashMap' qu'elle modifie, et elle retourne seulement un' double'. – ArtOfWarfare

0

Vous pouvez importer Tuple de System et l'utiliser pour retourner un tuple avec des types:

import System 

def string_and_int(s as string, i as int) as Tuple[of string, int]: 
    return Tuple[of string, int](s, i) 

Cela préserve le type pour chaque élément correctement. Cependant, soyez averti que Boo, de toute façon, le type de Tuple n'est pas itérables ou Découpable donc vous devez obtenir l'aide .Item1, .Item2 etc:

example = string_and_int("s", 2) 
print example.Item1 
# 's' 
print example.Item2 
# 2