【发布时间】: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类的实例,所以如果您已经知道s是Option,那么测试它是否是没有意义的String的一个实例。