Scala использование enum для строки в случае совпадения - PullRequest
1 голос
/ 29 апреля 2020

чего я хочу добиться здесь, это сначала сравнить string со значением enum, я попробовал, используя, по крайней мере, если

object FooType extends Enumeration {
  type FooType = Value
  val FooA = Value("FA")
  val FooB = Value("FB")
}

val x = "FA"
if (x == FooType.FooA)  //Does not match
  println("success using if without toString")
if (x == FooType.FooA.toString) //match
  println("success using if with toString")

println(FooType.FooA) //will print into "FA"

, он все еще работает хорошо, когда я сравните это с enum с toString методом. но если я поменяю его на match case, он превратится в error вместо

x match {
  case FooType.FooA.toString => println("success using match")
}

ScalaFiddle.scala:19: error: stable identifier required, but ScalaFiddle.this.FooType.FooA.toString found.
    case FooType.FooA.toString => println("success using match")
                      ^

, есть ли способ добиться этого с помощью регистра соответствия?

Ответы [ 2 ]

4 голосов
/ 29 апреля 2020

Вы должны преобразовать String в FooType, а затем использовать матч

  object FooType extends Enumeration {
    type FooType = Value
    val FooA = Value("FA")
    val FooB = Value("FB")
  }

  val x = FooType.withName("FA")

  x match {
    case FooType.FooA => println("matched")
    case _            => println("did not match")
  }
1 голос
/ 29 апреля 2020

Вы конвертируете тип в вашем случае совпадения, что недопустимо, вы можете сделать что-то вроде этого:

object FooType extends Enumeration {
  type FooType = Value
  val FooA = Value("FA")
  val FooB = Value("FB")
}

val x = "FA"

x match {
    case str if str == FooType.FooA.toString => println("success using match")
    case _            => println("did not match")
  }

или вы можете сделать что-то похожее на то, что @Ivan Stanislavciu c предложил

x match {
    case str if FooType.withName(str) == FooType.FooA => println("success using match")
    case _            => println("did not match")
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...