24

我是 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

4 回答 4

32

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

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 抱怨是因为它不知道 Int 在r既不是 1 也不是时要返回什么c

解决方法是添加一个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,那么它可能应该返回一个布尔值。换句话说,如果输入是 last,则返回 true,否则返回 false。

于 2012-09-24T17:36:51.973 回答
15

我怀疑你是想1作为true. 不; 它不是。

你的逻辑是:

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

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

于 2012-09-24T18:08:30.043 回答
3

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

于 2012-09-24T17:37:01.567 回答
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")
}    }

使用以下方法调用 Main 方法:

scala>TestIfElse.main(Array())

输出是:

Id is 10
于 2018-07-24T11:26:23.323 回答