String Scala中的模式匹配

时间:2018-05-01 13:27:52

标签: scala pattern-matching

我编写了上面的代码,根据一些规则定义了String的类型。

def dataType (input:String) : String = input match {
  case input if input.startsWith("Q")   => "StringType";
  case input if (input.startsWith("8") && !(input.contains("F"))) => "IntegerType"
  case input if (input.startsWith("8") && (input.contains("F"))) => "FloatType"
  case _                             => "UnknowType";
}

此代码运行良好,但我希望通过避免使用If声明来优化它。我希望它只基于模式匹配而不使用if语句。 我尝试以这种方式修改它,但它给我带来了不好的结果:

def dataType (input:String) : String = input match {
  case "startsWith('Q')"  => "StringType"
  case "startsWith('8') && !(contains('F')))" => "IntegerType"
  case "startsWith('8') && (contains('F')))" => "FloatType"
  case _                             => "UnknowType";
}

它总是给我UnknownType结果

请提供帮助

最好的问候

1 个答案:

答案 0 :(得分:4)

由于您正在检查包含F 的首字母和布尔值,因此您可以创建Tuple2[Char, Boolean]这些案例并在match case中使用如下:

def dataType (input:String) : String = (input.charAt(0), input.contains('F')) match {

  case ('8', true) => "FloatType"
  case ('Q', _)  => "StringType"
  case ('8', false) => "IntegerType"
  case _ => "UnknowType"
}

你应该没事。