Scala return boolean avec if else
Donc je dois scénario suivant:
def check(): Boolean = {
for ((digit1,digit2,digit3) <- SetOfDigits){
if ((1,2,5) == (digit1,digit2,digit3))
true
else
false
}
}
val SetOfDigits = Set((0,2,3),(1,5,6),(7,10,2),(1,2,5))
Maintenant, le problème est que la fonction doit retourner un Booléen, mais il me dit toujours que le type de retour ici est Unit
?
La fonction doit effectuer une itération sur les SetOfDigits
et si il trouve quelque chose d'égal comme (1,2,5)
il doit retourner true sinon false?
Personne n'a une réponse à ce problème et ce que je dois faire pour le faire fonctionner?
OriginalL'auteur Bajro | 2015-12-12
Vous devez vous connecter pour publier un commentaire.
Je ne suis pas d'accord avec la solution de M. V., j'aimerais plutôt vous suggérer de changer votre mise en œuvre, qui semble très Javish façon de gérer les choses:
contains
trouver un élément dans votre jeu, si l'élément n'est pas là, elle retourne false, à la recherche beaucoup mieux, à mon avis.En réponse à votre commentaire, j'avais aplatir le premier de la liste, puis utilisez
forAll
etcontains
:Remarque que j'ai flattend la première liste à partir d'un
List[(Int, Int, Int)]
à unList[Int]
, puisforAll
de l'évaluation d'un prédicat qui doit être vraie pour tous les éléments etcontains
fait le reste.J'ai fait un edit, la réponse était trop long pour un commentaire.
OriginalL'auteur Ende Neu
Vous devez ajouter
return
déclaration avant le vrai oufalse
pour s'arrêter sur la première exécution.Sinon, vous pouvez utiliser
yield
à recueillir les résultats de chaque sous-ensemble (vous obtiendrez la liste de Booléens)Dépend quelle est votre attente. Si vous voulez vous assurer que au moins sur des sous-ensembles de résultats satisfaisants, votre fonction ressemble à ce qui suit:
OriginalL'auteur vvg
Comme mentionné précédemment, le rendement, le résultat de l'
if-else
, sinon la compréhension renvoieUnit
. D'une manière similaire à @EndeNeu de l'API de base de la méthode, de tenir également compte de laqui arrête l'itération sur la collecte ainsi que le premier match est trouvé.
Noter également, par convention, l'étiquette d'une collection commence par une lettre minuscule, à savoir
setOfDigits
au lieu deSetOfDigits
, tandis que les types et les classes sont capitalisés.OriginalL'auteur elm
Je suis d'accord avec Ende Neu réponse.
Dans le cas général, vous pouvez introduire une variable booléenne que vous vérifiez à l'intérieur de la pour-de la compréhension pour y mettre fin prématurément. Je la préfère sur l'aide de la
return
mot-clé.return
n'est pas idiomatique à la Scala, mais ne sont pas non mutable variables.OriginalL'auteur Kigyo