我在scala中关注if:
myList是一些List [String]
if (myList.isEmpty) return x > 5
if x < 0 return false
if (myList.head == "+") return foo()
if (myList.head == "-") return bar()
是否可以通过模式匹配来实现?
答案 0 :(得分:5)
这有点尴尬,但应该有效:
myList match {
case Nil => x > 5
case _ if x < 0 => false
case "+" :: _ => foo()
case "-" :: _ => bar()
}
请注意,您的匹配不是详尽。
答案 1 :(得分:4)
对我来说这个更漂亮:
if(x > 0) {
myList.headOption match {
case Some("+") => foo()
case Some("-") => bar()
case None => x > 5
} else false
但是我不确定这是否不符合逻辑流程(例如,当列表为空时提前退出 - 它是否在您的上下文中破坏了某些内容?),如果是这样,请随意说出或downvote
答案 2 :(得分: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
}