如何在Scala中使用选项

时间:2018-04-29 17:46:46

标签: scala functional-programming

我只是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的正确方法,将会非常有帮助。

2 个答案:

答案 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