scala如果写别的话怎么写

Sha*_*han 23 scala

我是scala的新学习者,我正在尝试运行此示例代码

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

  else if (r == c){
   return 1
    }
   }
Run Code Online (Sandbox Code Playgroud)

但它给了我编译时错误,说

Multiple markers at this line
- type mismatch;  found   : Unit  required: Int
- type mismatch;  found   : Unit  required: Int
Run Code Online (Sandbox Code Playgroud)

请帮助我,并建议我学习scala的一些好网站.

dhg*_*dhg 31

首先,让我们清理一下你的代码:

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 ??
}
Run Code Online (Sandbox Code Playgroud)

所以你告诉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
}
Run Code Online (Sandbox Code Playgroud)

最后要注意的是,如果你有一个名字以逗号开头的函数is,那么它应该返回一个布尔值.换句话说,如果输入是最后一个,则返回true,否则返回false.

  • 就像一个注释,惯用你应该尽量避免使用``return``. (4认同)

Lui*_*hys 15

我怀疑你正试图1作为替补来回归true.别; 它不是.

你的逻辑是:

def isLast(c: Int, r: Int): Boolean = r == 1 || r == c
Run Code Online (Sandbox Code Playgroud)

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