Как использовать параметры в Scala - PullRequest
0 голосов
/ 29 апреля 2018

Я только начинающий в 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)) и add (1,2, Some (5)), код работает, я попытался вызвать функцию, используя add (1,2), и у кода возникли проблемы , Несмотря на то, что я упомянул третий аргумент - вариант, почему мы должны упоминать третий аргумент как None или Some (d) (является ли some (d) правильным способом для его передачи?). Было бы очень полезно, если бы вы предложили правильный способ использования опции в соответствии с этим кодом.

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

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
0 голосов
/ 29 апреля 2018

Способ в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...