【问题标题】:Scala Pattern Matching using Option[Type]使用 Option[Type] 进行 Scala 模式匹配
【发布时间】:2020-03-20 16:02:01
【问题描述】:

我现在正在玩 Scala 和模式匹配。我有它背后的一般想法,并且可以让基础知识发挥作用。我的问题是选项 []。可以在 Option[] 上使用模式匹配吗?

我想要做的是做一个小函数,它将接受一个 option[String] 参数,然后根据输入返回字符串,如果它是字符串,如果不是,则返回。我不太确定如何解决这个问题,我尝试了一些方法,但它要么失败,要么在下面的情况下永远不会遇到第二种情况。

def getString(someString: Option[String]): String =
        someString match {
          case s: Option[String] => someString //also tried things like case: String => ...
          case _ => s"no string entered" //and things like case _ => ...
        }

【问题讨论】:

  • 试试case Some(someString) => someString
  • 您似乎不了解模式匹配,因为您没有检查任何模式。此外,您似乎不知道选项类型是如何工作的。我建议您遵循任何基本教程或介绍性书籍,因为这是该语言的基本行为。
  • 太棒了,非常感谢!必须尝试过一切,但那。只是为了澄清,如果传入的某些字符串中有某些值,这将匹配吗?为什么不能使用case s:String,因为它仍在传递字符串?
  • @LuisMiguelMejíaSuárez,刚刚开始并感到困惑就是一切。我现在正在阅读 Essential Scala 书
  • @RoryHayes Option[T] 是一个 ADT 它是 Some(value: T)None。因此,当您进行模式匹配时,您可以检查这两种可能性。 - 另外case x: C 的作用是检查x 是否是C 类的实例,所以如果您已经知道sOption,那么测试它是否是没有意义的String 的一个实例。

标签: scala pattern-matching


【解决方案1】:

这是实现您的功能的最简单方法:

def getString(someString: Option[String]): String =
  someString.getOrElse("no string entered")

如果你想使用match,它看起来像这样:

def getString(someString: Option[String]): String =
  someString match {
    case Some(s) => s
    case _ => "no string entered"
  }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多