scala如何编写if-else

scala如何编写if-else,scala,Scala,我是scala的新手,我正在尝试运行这个示例代码 def isLast(c: Int, r: Int):Int ={ if(r == 1) { return 1; } else if (r == c){ return 1 } } 但它给了我编译时错误,说 Multiple markers at this line - type mismatch; found : Unit required: Int - type mismatch;

我是scala的新手,我正在尝试运行这个示例代码

 def isLast(c: Int, r: Int):Int ={
   if(r == 1)
   {
   return 1;
   }

  else if (r == c){
   return 1
    }
   }
但它给了我编译时错误,说

Multiple markers at this line
- type mismatch;  found   : Unit  required: Int
- type mismatch;  found   : Unit  required: Int

请帮助我,并向我推荐一些学习scala的好网站。

首先,让我们稍微整理一下您的代码:

def isLast(c: Int, r: Int):Int = {
  if(r == 1)
    return 1
  else if (r == c)
    return 1
  // but what about when r is neither 1 nor c ??
}
所以您告诉scala,如果
r
为1,则返回1,如果
r==c
,则返回1。那很好。但是如果你想让这个方法返回一个Int,它必须在每种情况下都返回一个Int。所以Scala抱怨,因为当
r
既不是1也不是
c
时,它不知道返回什么Int

修复方法是添加一个
else
子句,然后返回一些其他Int

作为补充说明,您可以并且应该在此处省略
return
关键字,让Scala隐式地知道if-else表达式的结果(作为函数体中的最后一个表达式)应该返回:

def isLast(c: Int, r: Int):Int = {
  if(r == 1)
    1
  else if (r == c)
    1
  else
    0 // or some other Int
}

最后,如果您有一个名称以
开头的函数is
,那么它可能会返回一个布尔值。换句话说,如果输入是最后一个,则返回true,否则返回false。

没有“else”子句,只有一个“else-if”,因此函数不能保证返回整数。如果它同时满足这两个条件,则不返回任何内容,这是一种“单位”返回类型。您需要明确地说
else 0

我怀疑您试图返回
1
作为
true
的替代。不要;事实并非如此

你的逻辑是:

def isLast(c: Int, r: Int): Boolean = r == 1 || r == c

:Boolean
类型注释是可选的。这里可以安全地省略它,因为从右边的短表达式和您对方法的命名可以非常明显地看出返回类型是什么。当1行代码可用时,不要使用10行代码。

简单地说,我们可以编写If-Else语句:

scala> object TestIfElse{
def main(args: Array[String]){
var id = 10
if(id == 10)
println("Id is "+id)
else
println("Id is different")
}    }
使用以下命令调用Main方法:

scala>TestIfElse.main(Array())
输出为:

Id is 10

请注意,按照习惯,您应该尽量避免使用
return
。这是开始Scala的好地方。这不是什么,但如果您没有显式返回某些内容,则返回类型为“Unit”