如何在if / else中使用模式匹配?

时间:2016-01-29 12:00:07

标签: scala pattern-matching

我用if / else子句编写了一个函数,但考虑了使用模式匹配的可能性。我失败了,但是很高兴看到如何为它的学习成果做好准备。

def sha1():String = {
    if (System.getProperty("os.name").contains("OS X")){
       ("x.tif" !!).toString
    }
    else{
      "failed"
    }
}

我尝试了这个逻辑,我希望字符串参与测试("测试"包含(" 0S X")是合法的)。这会导致错误。

 def sha2(command:String):String = System.getProperty("os.name") match {
    case contains("OS X")=> ("x.tif" !!).toString

} 

第二次尝试是写一些类似的东西,我在函数调用的输入上匹配:

def sha3():String = System.getProperty("os.name").contains(x) match {
    case x=="OS X" => "hello"
}

2 个答案:

答案 0 :(得分:3)

这可以通过使用模式匹配来表达

def sha1():String = System.getProperty("os.name") match {
  case s if s.contains("OS X") => ("x.tif" !!).toString
  case _ => "failed"
}

如果您的代码真的只有一个case,那么使用if else的方法可能会更好

def sha1(): String = 
  if ( System.getProperty("os.name").contains("OS X") )
    ("x.tif" !!).toString
  else
    "failed"

答案 1 :(得分:0)

你不需要模式匹配。只是做:

"OS X".r
  .findFirstIn(System.getProperty("os.name"))
  .map { _ => ("x.tif" !!).toString }
  .getOrElse("failed")