сопоставление с образцом в String Scala - PullRequest
0 голосов
/ 01 мая 2018

Я написал код выше, чтобы определить тип 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 голосов
/ 01 мая 2018

Поскольку вы проверяете начальную букву и логическое значение на предмет содержания 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"
}

А у тебя должно быть все хорошо

...