Scala 将if束替换为模式匹配

Scala 将if束替换为模式匹配,scala,functional-programming,Scala,Functional Programming,我在scala中有以下if: myList是一些列表[字符串] if (myList.isEmpty) return x > 5 if x < 0 return false if (myList.head == "+") return foo() if (myList.head == "-") return bar() if(myList.isEmpty)返回x>5 如果xx>5 案例uuxfalse 案例“+”::=>foo() 大小写“--”:\=>bar() } 请注意,您

我在scala中有以下if:

myList是一些列表[字符串]

if (myList.isEmpty) return x > 5
if x < 0 return false
if (myList.head == "+") return foo()
if (myList.head == "-") return bar()
if(myList.isEmpty)返回x>5
如果x<0,则返回false
if(myList.head==“+”)返回foo()
如果(myList.head==“-”)返回条()

有没有可能通过模式匹配来实现这一点?

这有点尴尬,但应该可以:

myList match {
  case Nil => x > 5
  case _ if x < 0 => false
  case "+" :: _ => foo()
  case "-" :: _ => bar()
}
myList匹配{
案例Nil=>x>5
案例uux<0=>false
案例“+”::=>foo()
大小写“--”:\=>bar()
}

请注意,您的匹配并非详尽无遗。

这有点尴尬,但应该可以:

myList match {
  case Nil => x > 5
  case _ if x < 0 => false
  case "+" :: _ => foo()
  case "-" :: _ => bar()
}
myList匹配{
案例Nil=>x>5
案例uux<0=>false
案例“+”::=>foo()
大小写“--”:\=>bar()
}

请注意,您的匹配并非详尽无遗。

确实如此,您可以在空列表上进行匹配,也可以在列表中的项目上进行匹配。如果您只需要一个不匹配的条件,请使用
case\uif…

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
  }
def sampleFunction:Boolean=
lst匹配{
案例Nil=>x>5
案例uuIf(x<0)=>假
大小写“+”:。=>true
大小写“--”:\=>false
case=>true//如果没有匹配项,则返回一些内容
}

是的,您可以在空列表上进行匹配,也可以在列表中的项目上进行匹配。如果您只需要一个不匹配的条件,请使用
case\uif…

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
  }
def sampleFunction:Boolean=
lst匹配{
案例Nil=>x>5
案例uuIf(x<0)=>假
大小写“+”:。=>true
大小写“--”:\=>false
case=>true//如果没有匹配项,则返回一些内容
}

对我来说,这个更漂亮:

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

但我不确定这是否与逻辑流相冲突(例如,当列表为空时提前退出——它是否在您的上下文中破坏了某些内容?),如果是这样,请随意说出来或投反对票。

对我来说,这一个更漂亮:

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

但我不确定这是否与逻辑流程相冲突(例如,当列表为空时提前退出——它是否破坏了您上下文中的某些内容?),如果是这样,请随意说,或者进行向下投票。

您实际上不需要在最后使用
案例
;如果你知道它不会被使用,就不要使用它(如果发生了疯狂的事情,你想得到一个运行时异常)。而且你肯定不想把
Any
作为你的返回类型,因为以后你几乎无法处理它了。@dhg我添加了最后一个案例,这样它就模仿了quiestion的行为——当没有匹配的时候什么都不做。是的,返回
Any
没有任何意义,我只是用它作为例子(我最好改变它);有道理。但是我喜欢你的编辑建议一个更好的方法。你实际上不需要在结尾处使用
案例;如果你知道它不会被使用,就不要使用它(如果发生了疯狂的事情,你想得到一个运行时异常)。而且你肯定不想把
Any
作为你的返回类型,因为以后你几乎无法处理它了。@dhg我添加了最后一个案例,这样它就模仿了quiestion的行为——当没有匹配的时候什么都不做。是的,返回
Any
没有任何意义,我只是用它作为例子(我最好改变它);有道理。但我喜欢你的编辑建议一个更好的方法。