Scala if-else行为

Scala if-else行为,scala,Scala,我在scala的早期阶段,我希望下面两位代码的行为是相同的,但事实并非如此。我的印象是“else”是可选的 你知道为什么吗?这是一个toString方法(在一个表示有理数的简单类中) 这将按预期工作,返回“1”(对于1/1): 不需要,返回“1/1”: else部分确实是可选的,但方法的返回值是方法中最后一个表达式的值。因此,如果不将else部分放入实际的else块中,则始终返回该值。作为解决方案,您可以使用首选的if/else表达式,或者在if语句中使用实际的return语句 // The r

我在scala的早期阶段,我希望下面两位代码的行为是相同的,但事实并非如此。我的印象是“else”是可选的

你知道为什么吗?这是一个toString方法(在一个表示有理数的简单类中)

这将按预期工作,返回“1”(对于1/1):

不需要,返回“1/1”:


else
部分确实是可选的,但方法的返回值是方法中最后一个表达式的值。因此,如果不将else部分放入实际的
else
块中,则始终返回该值。作为解决方案,您可以使用首选的
if/else
表达式,或者在
if
语句中使用实际的
return
语句

// The return value of the method is the value of the if/else expression.
if (numer == denom) {
  "1"
} else {
  numer + "/" + denom
}


else
部分确实是可选的,但方法的返回值是方法中最后一个表达式的值。因此,如果不将else部分放入实际的
else
块中,则始终返回该值。作为解决方案,您可以使用首选的
if/else
表达式,或者在
if
语句中使用实际的
return
语句

// The return value of the method is the value of the if/else expression.
if (numer == denom) {
  "1"
} else {
  numer + "/" + denom
}


是的,我错误地认为
“1”
将是执行的最后一条语句,因为它将立即返回,而最后一条语句
numer+“/”+denom
甚至不会被计算。@Kaveh-您可以使用
return
语句强制执行该行为,但这不是Scala惯用的方法。是的,我错误地认为
“1”
将是执行的最后一条语句,因为它将立即返回,而最后一条语句
numer+“/”+denom
甚至不会被计算。@Kaveh-您可以使用
return
语句强制执行该行为,但这不是Scala惯用的方法。
// The return value of the method is the value of the if/else expression.
if (numer == denom) {
  "1"
} else {
  numer + "/" + denom
}
if (numer == denom) {
  return "1"
}

numer + "/" + denom