如何在Scala中使用多个case语句?

时间:2018-04-10 10:35:36

标签: scala

def main(args: Array[String]) {
        println(dateExtract("2020-05-15","yyyy-MM-dd","moo"))             
   }   
  def dateExtract(date: String, ipFormat: String, field: String): String ={
      var dateformat  = ipFormat;
      val dtf = java.time.format.DateTimeFormatter.ofPattern(dateformat)
      val dateString = date;
      val d = java.time.LocalDate.parse(dateString, dtf)
      var yea1="";
      var mon1="";
      field match {
    case years =>  val yea = d.getYear
                    yea1=yea.toString
    case moo => val mth = d.getMonth
                    mon1=mth.toString    
  }
      mon1
    }

在这段代码中,我向函数dateExtract传递了3个参数。 在函数dateExtract中,我使用case语句的第三个参数, 但它显示了像这样的警告

`Solution.scala:20: warning: patterns after a variable pattern cannot match (SLS 8.1.1)
    case years =>  val yea = d.getYear
         ^
Solution.scala:22: warning: unreachable code due to variable pattern 'years' on line 20
    case moo => val mth = d.getMonth
             ^
Solution.scala:22: warning: unreachable code
    case moo => val mth = d.getMonth
             ^
three warnings found`

给我一​​个解决方案

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您希望匹配Strings "years""moo",然后根据传递的函数参数返回YearMonth值。如果是这种情况,那么在您的模式匹配中,您不匹配String值,则匹配显示警告的某个变量year。另请不要使用var尝试使用val。请尝试以下代码,

def dateExtract(date: String, ipFormat: String, field: String): String = {
    val dtf = java.time.format.DateTimeFormatter.ofPattern(ipFormat)
    val d = java.time.LocalDate.parse(date, dtf)
    field match {
      case "years" => d.getYear.toString
      case "moo" => d.getMonth.toString
      //uncomment it if you want to include default case
      //case _ => what you want to do in case your String doesn't matches any of the above cases.
    }
}