我有如下方法:
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
?
答案 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
。