使用选项[Type]进行Scala模式匹配

使用选项[Type]进行Scala模式匹配,scala,pattern-matching,Scala,Pattern Matching,我现在正在玩Scala和模式匹配。我有它背后的一般想法,可以让基本的工作。我的问题是选择[]。是否可以在选项[]上使用模式匹配 我想做的是做一个小函数,它将接受一个option[String]参数,然后根据输入返回字符串(如果是字符串),如果不是,则返回平视。虽然我不太确定该怎么做,但我尝试了一些方法,但要么失败了,要么在下面的例子中永远不会碰到第二种情况 def getString(someString: Option[String]): String = someString

我现在正在玩Scala和模式匹配。我有它背后的一般想法,可以让基本的工作。我的问题是选择[]。是否可以在选项[]上使用模式匹配

我想做的是做一个小函数,它将接受一个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 _ => ...
        }

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

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
的实例是没有意义的。