如何更新接受选项的方法

时间:2018-12-21 19:44:17

标签: scala

我有如下方法:

52 - 48

这可以,但是,我想将其更改为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

4 个答案:

答案 0 :(得分:3)

应该是

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

您的值在Option monad内部,因此您需要使用其方法进行访问

我在工作表中尝试了代码,因为有人指出了它的一些问题,基本上,在左括号之前您需要一个=符号,并且不需要返回,而且type是一个保留字,因此,如果要使用反引号作为字段名称,则必须使用反引号,但我宁愿选择其他名称

答案 1 :(得分:1)

由于您是在问其他问题(How to get a particular item from the list?),因此我认为没有必要更新方法来接收Option,您可以这样做:

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

使用您的第一个函数定义,而无需传入Option

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

答案 2 :(得分:0)

@Bruno的答案正确使用了Option,但没有解决函数返回Unit而不是Boolean的问题。这是修改后的版本:

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

答案 3 :(得分:-2)

您可以使用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