scala如果写别的话怎么写

时间:2012-09-24 17:34:26

标签: 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;  found   : Unit  required: Int

请帮助我,并建议我学习scala的好网站。

4 个答案:

答案 0 :(得分:29)

首先,让我们稍微清理你的代码:

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,它必须在每个的情况下返回一个。所以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。

答案 1 :(得分:15)

我怀疑您正在尝试将1作为true的替代品。别;它不是。

你的逻辑是:

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

: Boolean类型注释是可选的。在这里放弃它是安全的,因为从右边的短表达式和方法的命名来看,返回类型非常明显。当1发生时,不要使用10行代码。

答案 2 :(得分:3)

你没有“else”子句,只是一个“else if”,所以你的函数不能保证返回一个整数。如果它落在两个条件下,你将什么也不返回,这是一个“单位”返回类型。您需要明确说出else 0

答案 3 :(得分:0)

我们可以简单地编写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")
}    }

使用以下方法调用主要方法:

scala>TestIfElse.main(Array())

输出为:

Id is 10