1

如果在 scala 中有以下内容:

myList 是一些 List[String]

if (myList.isEmpty) return x > 5
if x < 0 return false
if (myList.head == "+") return foo()
if (myList.head == "-") return bar()

是否可以通过模式匹配来做到这一点?

4

3 回答 3

5

这有点尴尬,但应该工作:

myList match {
  case Nil => x > 5
  case _ if x < 0 => false
  case "+" :: _ => foo()
  case "-" :: _ => bar()
}

请注意,您的匹配并不详尽

于 2012-09-24T19:25:13.113 回答
4

对我来说,这个更漂亮:

if(x > 0) {
  myList.headOption match {
    case Some("+") => foo()
    case Some("-") => bar()
    case None => x > 5
} else false

但是我不确定这是否不符合逻辑流程(例如,当列表为空时提前退出——在您的上下文中它是否破坏了某些东西?),如果是这样,请随意说或否决。

于 2012-09-24T19:30:51.017 回答
3

也就是说,您可以匹配空列表,也可以匹配列表内的项目。如果您只需要一个不匹配的条件,请使用case _ if ...

def sampleFunction: Boolean =
  lst match {
    case Nil            => x > 5
    case _ if (x < 0)   => false
    case "+" :: _       => true
    case "-" :: _       => false
    case _              => true // return something if nothing matches
  }
于 2012-09-24T19:29:11.873 回答