使用选项[Type]进行Scala模式匹配
我现在正在玩Scala和模式匹配。我有它背后的一般想法,可以让基本的工作。我的问题是选择[]。是否可以在选项[]上使用模式匹配 我想做的是做一个小函数,它将接受一个option[String]参数,然后根据输入返回字符串(如果是字符串),如果不是,则返回平视。虽然我不太确定该怎么做,但我尝试了一些方法,但要么失败了,要么在下面的例子中永远不会碰到第二种情况使用选项[Type]进行Scala模式匹配,scala,pattern-matching,Scala,Pattern Matching,我现在正在玩Scala和模式匹配。我有它背后的一般想法,可以让基本的工作。我的问题是选择[]。是否可以在选项[]上使用模式匹配 我想做的是做一个小函数,它将接受一个option[String]参数,然后根据输入返回字符串(如果是字符串),如果不是,则返回平视。虽然我不太确定该怎么做,但我尝试了一些方法,但要么失败了,要么在下面的例子中永远不会碰到第二种情况 def getString(someString: Option[String]): String = someString
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 _ => ...
}
这是实现功能的最简单方法:
def getString(someString: Option[String]): String =
someString.getOrElse("no string entered")
如果要使用匹配
,它看起来如下所示:
def getString(someString: Option[String]): String =
someString match {
case Some(s) => s
case _ => "no string entered"
}
这是实现功能的最简单方法:
def getString(someString: Option[String]): String =
someString.getOrElse("no string entered")
如果要使用匹配
,它看起来如下所示:
def getString(someString: Option[String]): String =
someString match {
case Some(s) => s
case _ => "no string entered"
}
尝试
case Some(someString)=>someString
似乎您不了解模式匹配,因为您没有检查任何模式。此外,您似乎不知道选项类型是如何工作的。我建议你们学习任何基本的教程或入门书,因为这是语言的基本行为。太棒了,非常感谢!肯定什么都试过了。为了澄清,如果传入的某个字符串中有某个值,那么这将匹配吗?为什么不能使用case s:String
,因为它仍然在传递一个字符串呢?@LuisMiguelMejíaSuárez,只是开始和困惑而已。我正在阅读《基本Scala》一书moment@RoryHayes选项[T]
是ADT,它要么是Some(值:T)
要么是None
。所以当你进行模式匹配时,你可以检查这两种可能性另外,case x:C
所做的是检查x
是否是类C
的实例,因此如果您已经知道s
是一个选项
,那么测试它是否是String
的实例是没有意义的。请尝试case Some(someString)=>someString
您似乎不了解模式匹配,因为您没有检查任何模式。此外,您似乎不知道选项类型是如何工作的。我建议你们学习任何基本的教程或入门书,因为这是语言的基本行为。太棒了,非常感谢!肯定什么都试过了。为了澄清,如果传入的某个字符串中有某个值,那么这将匹配吗?为什么不能使用case s:String
,因为它仍然在传递一个字符串呢?@LuisMiguelMejíaSuárez,只是开始和困惑而已。我正在阅读《基本Scala》一书moment@RoryHayes选项[T]
是ADT,它要么是Some(值:T)
要么是None
。所以当你进行模式匹配时,你可以检查这两种可能性另外,case x:C
的作用是检查x
是否是类C
的实例,因此如果您已经知道s
是一个选项
,那么测试它是否是String
的实例是没有意义的。