代码之家  ›  专栏  ›  技术社区  ›  Anthony

如何更新方法以接受选项

  •  0
  • Anthony  · 技术社区  · 6 年前

    private checkSomething(something: Color) {
      return something.name == "red" || something.type == "light"
    }
    

    好的,不过,我想把它改成 Option 如下所示:

    private checkSomething(something: Option[Color]) {
      return something.name == "red" || something.type == "light"
    }
    

    但这打破了我的方法。我怎么还能打电话 something.name something.light ?

    4 回复  |  直到 6 年前
        1
  •  3
  •   ultrasecr.eth    6 年前

    可能是

    private def checkSomething(something: Option[Color]) = {
       something.exists(s => s.name == "red" || s.`type` == "light")
    }
    

    您的值在选项monad中,因此需要使用它的方法来访问它

    我在工作表中尝试了代码,因为有人指出了一些问题,基本上你需要一个 = 在开口支架前签字并返回也不必要 type

        2
  •  1
  •   Alejandro Alcalde    6 年前

    既然你问这个是指你的另一个问题( How to get a particular item from the list? Option ,你可以这样做:

    val result = myList1.find(_.id == toFind1.id).map(checkSomething)
    

    使用第一个函数定义,而不传入

    但是,如果要更改方法签名,可以使用@Tim实现。

        3
  •  0
  •   Tim    6 年前

    Option 但不能解决函数返回的问题 Unit Boolean . 以下是修改后的版本:

    private def checkSomething(something: Option[Color]) =
      something.exists(s => s.name == "red" || s.type == "light")
    
        4
  •  -2
  •   prayagupa soxunyi    6 年前

    Option.contains ,

    scala> case class Color(name: String, `type`: String)
    defined class Color
    
    scala> def checkSomething(something: Option[Color]) = 
              something.map(_.name).contains("red") || something.map(_.`type`).contains("light")
    checkSomething: (something: Option[Color])Boolean
    

    用法,

    scala> checkSomething(Some(Color("red", "light")))
    res2: Boolean = true
    
    scala> checkSomething(Some(Color("blue", "light")))
    res3: Boolean = true
    
    scala> checkSomething(Some(Color("blue", "dark")))
    res4: Boolean = false
    

    而且,你不需要 return