2017-06-20 1 views
0

J'essaie de comparer deux chaînes dans Scala. Voici la fonction.Comparer des chaînes dans Scala - équivaut vs ==

def max(x:Int, y:String): String = { 
    | if (y=="Happy") "This is comparing strings as well" 
    | else "This is not so fair" 
    | if (x > 1) "This is greater than 1" 
    | else "This is not greater than 1" 
    | } 

De some answers je suppose que je peux utiliser le symbole « == » pour comparer les chaînes. J'ai donné les entrées suivantes et obtenu les sorties suivantes. qu'est-ce qui me manque ou Scala se comporte différemment?

max (1,"Happy") 
res7: String = This is not greater than 1 

println(max(2, "sam")) 
This is greater than 1 
+4

Je pense que le problème est pas avec le '==', mais le fait que vous avez deux if/else.https: //stackoverflow.com/a/12560532/3072566 – litelite

+0

Merci @litelite. Je garderai cette question pour la référence des autres. – Dinesh

+0

@Dinesh, S'il vous plaît accepter la réponse. –

Répondre

2

Cela se produit car dans scala la valeur de la dernière instruction accessible est le résultat des fonctions. Dans ce cas, pour "max (1," Happy ")", le code passe à l'intérieur de y = "content" mais juste après, il va dans la branche else de if (x> 1). Comme c'est la dernière instruction à l'intérieur de la fonction, vous obtenez le résultat.

à recouper il introduire une déclaration d'impression dans le premier si le bloc

def max(x:Int, y:String): String = { 
    | if (y=="Happy") println("This is comparing strings as well") 
    | else "This is not so fair" 
    | if (x > 1) "This is greater than 1" 
    | else "This is not greater than 1" 
    | } 

appellent maintenant avec « max (1, » Happy «) »

Résultat: Ceci est la comparaison des chaînes aussi bien Ce n'est pas plus grand que 1

qui montre que vous comparez les chaînes d'une manière correcte.

1

Votre fonction max renvoie une seule chaîne et cette chaîne est toujours la dernière instruction ifelse. Si vous voulez que les deux sorties de comparaison, alors vous devriez retourner un tuple2 de chaînes comme

scala>  def max(x:Int, y:String): (String, String) = { 
    |  var string1 = "This is not greater than 1" 
    |  var string2 = "This is not so fair" 
    |  if (x > 1) string1 = "This is greater than 1" 
    |  if (y=="Happy") string2 = "This is comparing strings as well" 
    |  (string1, string2) 
    |  } 
max: (x: Int, y: String)(String, String) 

scala> max(1, "Happy") 
res0: (String, String) = (This is not greater than 1,This is comparing strings as well) 

scala> res0._1 
res1: String = This is not greater than 1 

scala> res0._2 
res2: String = This is comparing strings as well 

scala> max(2, "sam") 
res3: (String, String) = (This is greater than 1,This is not so fair) 

J'espère que cette réponse aide