我只是scala的初学者,我正在学习这些功能。我刚刚开发了一小段代码,如下所示。
class OptionClass {
}
object OptionClass {
def main(args: Array[String]) {
println("This is my third code")
def add(a: Int, c: Int, d: Option[Int]): Int = {
d match {
case Some(d) =>
val f = a + c + d
f
case None => a + c
}
}
val result = add(1, 2, None)
println(s"The result value is $result")
val newResult = add(1, 2, Some(5))
println(s"The new result is $newResult")
val revisedResult = add(1, 2)
println(s"The result value is $revisedResult")
//****Adding the code snippets as per the comments below as it may be useful for someone else who refers the questio
def addVal(a:Int,b:Option[Int]= None):Int = {
a+b.getOrElse(10)
}
val firstResult=addVal(1)
println(s"The firstResult is $firstResult")
val secondResult=addVal(1,Some(2))
println(s"The secondResult is $secondResult")
val thirdResult=addVal(1,None)
println(s"The thirdResult is $thirdResult")
}
}
我的问题是,
当我使用add(1,2,None)调用函数并添加(1,2,Some(5))代码工作时,我尝试使用add(1,2)调用函数,代码有问题。虽然我已经提到第三个参数是选项,但我们为什么要提到第三个参数为None或Some(d)(某些(d)是传递它的正确方法吗?)。如果您根据此代码建议使用Option的正确方法,将会非常有帮助。
答案 0 :(得分:3)
Option
s不允许从函数调用中省略参数;它们适用于变量可能具有具体值(Some
),或者可能缺少具体值(None
)。
如果要允许从调用中省略d
,只需将其设为默认参数即可。我只是将其默认为0,因为添加时不会执行任何操作:
// Default d to 0
def add(a: Int, c: Int, d: Int = 0): Int =
a + c + d
add(1, 2) // 3
add(1, 2, 3) // 6
答案 1 :(得分:1)
Scala中具有参数默认值的方式如下:(与类型无关)
def foo(a: Int, b: Option[Int] = None) = {
a + b.getOrElse(0)
}
foo(1, Some(2)) // compiles equals 3
foo(1, None) // compiles equals 1
foo(1) // compiles equals 1