如何更新接受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.namesomething.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的方法的主要内容,如果未能解决你的问题,请参考以下文章

更新片段参数的最佳实践?

小程序各种功能代码片段整理---持续更新

如何更新所有片段? onProgressUpdate 不更新所有片段

如何设置echarts option参数

JS如何动态给select的option赋值?

如果更新数据,如何更新FlatList