我想从if块中返回一个整数类型,如下例所示:
def a {
val res = if (1 == 1) {
val x = 1
b(x)
}
}
def b(x:Int) = {
20
}
Run Code Online (Sandbox Code Playgroud)
这里res的类型是 val res: AnyVal
我怎样才能改成它Int?
如果您没有要返回的默认值,那么您可以返回一个Option[Int],然后将其与getOrElse:
def a(n: Int): Option[Int] = {
if (n < 100) {
Some(n * 2)
} else {
None
}
}
a(10).getOrElse("Something else")
Run Code Online (Sandbox Code Playgroud)
另一种可能性是使用部分函数,因为在您的情况下,您的第一个函数不会涵盖所有情况,并且您希望有一个后备:
val a: PartialFunction[Int, Int] = {
case n if n < 100 =>
n * 2
}
val b: PartialFunction[Int, String] = {
case _ =>
"Something else"
}
Run Code Online (Sandbox Code Playgroud)
然后你可以使用applyOrElse:
// If function a is not defined for the input, then call function b
val result = a.applyOrElse(10, b)
Run Code Online (Sandbox Code Playgroud)
或者将两个部分函数合并到另一个函数中,并调用它:
// Combine a and b
val cf = a.orElse(b)
// Call
val result = cf(10)
Run Code Online (Sandbox Code Playgroud)
您必须添加else替代品,例如:
def a {
val res = if (1 == 1) {
val x = 1
b(x)
} else 0
}
Run Code Online (Sandbox Code Playgroud)
发生这种情况是因为对于不存在的else情况,编译器使用Unit. 而最近的常见类型Int和Unit是AnyVal。
| 归档时间: |
|
| 查看次数: |
5749 次 |
| 最近记录: |