我是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.
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行代码.
| 归档时间: |
|
| 查看次数: |
34648 次 |
| 最近记录: |