如何更新接受Option的方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何更新接受Option的方法相关的知识,希望对你有一定的参考价值。
我有一个如下方法:
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
?
答案
这将是
private def checkSomething(something: Option[Color]) = {
something.exists(s => s.name == "red" || s.`type` == "light")
}
您的值在Option monad中,因此您需要使用其方法来访问它
我在工作表中尝试了代码,因为我指出了它的一些问题,基本上你需要在开始括号之前的=
符号并且返回是不必要的,type
也是一个保留字,所以如果你想使用你必须使用反引号它作为一个字段名称,但我宁愿选择一个不同的名称
另一答案
既然你问这个引用你的另一个问题(How to get a particular item from the list?),我认为没有必要更新你的方法来接收Option
,你可以这样做:
val result = myList1.find(_.id == toFind1.id).map(checkSomething)
使用您的第一个函数定义,而不传入Option
但是,如果要更改方法签名,可以使用@Tim实现。
另一答案
@Bruno的答案正确使用了Option
,但没有解决函数返回Unit
而不是Boolean
的问题。这是修改后的版本:
private def checkSomething(something: Option[Color]) =
something.exists(s => s.name == "red" || s.type == "light")
另一答案
你可以用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
。
以上是关于如何更新接受Option的方法的主要内容,如果未能解决你的问题,请参考以下文章