Как я могу сделать совпадение шаблона над reflect.runtime.universe.Type?Scala: соответствие шаблону по сравнению с изображением.runtime.universe.Type?
def test(t: reflect.runtime.universe.Type) {
t match {
case Int => \\ ...
case Double => \\ ...
case String => \\ ...
case _ => \\ ...
}
}
Это dosn't работу, как переводчик жалуется:
error: pattern type is incompatible with expected type;
found : Int.type
required: reflect.runtime.universe.Type
Note: if you intended to match against the class, try `case _: Int`
case Int => // ...
^
Попытка предложение не работает, либо:
def test(t: reflect.runtime.universe.Type) {
t match {
case _: Int => \\ ...
case _: Double => \\ ...
case _: String => \\ ...
case _ => \\ ...
}
}
...
error: pattern type is incompatible with expected type;
found : Int
required: reflect.runtime.universe.TypeApi
case _: Int => // ...
^
Так что правильный синтаксис для этого?
Спасибо!
пс .: Используя If- заявление, я могу сделать следующее: если (т == reflect.runtime.universe.typeOf [String]) // ... Это, однако, не работает в совпадающим синтаксисе шаблона: т матча { case reflect.runtime.universe.typeOf [String] => \\ ... случай _ => } Я получаю ошибку намек: тип TYPEOF не является членом scala.reflect.api.JavaUniverse случае reflect.runtime.universe.typeOf [String] => fieldMap (pName) .set (pVal) –
И еще одна проблема: выполнение if-утверждения Я нахожу, что scala.Int явно не совпадает с Int. Однако результат reflection.runtime.universe.typeOf [scala.Int]) является Int, а результат (t == reflect.runtime.universe.typeOf [Int]) является ложным, а также результатом if (т == reflect.runtime.universe.typeOf [scala.Int]). Как это решить? –
Вам нужен стабильный идентификатор для сопоставления шаблонов, если не используется 'if', и вы хотите использовать' =: = ', а не' == '. Попробуйте 'case t, если t =: = typeOf [String] => ...' – lmm