Типы динамических типов в Groovy - PullRequest
1 голос
/ 08 августа 2009

Основной вопрос: Какие операторы, свойства и т. Д. Можно использовать для определения типа переменных в Groovy?

Справочная информация:

У меня есть произвольно глубоко вложенная структура данных словаря. Это результат вызова request.JSON в контроллере Grails. Сначала я хотел бы убедиться, что определенные ключи находятся в словаре, с соответствующими типами. Я хотел бы реализовать это путем создания прототипа структуры данных и определения метода для сравнения структур данных. Что-то вроде:

def prototype = [ username: "JennyJeans",
                   message: [ subject: "Hello World!",
                                 body: "Will write soon."
                            ]
                 ]

Конечно, содержание строк здесь не имеет значения. Затем в своих действиях я проверяю так:

if(similarDataStructure(prototype, request.JSON)) {
// XXX
} else {
 // report error
}

Итак, что делает метод similarDataStructure? В псевдокоде:

def similarDataStructure(a, b) {
  if(type(a) != type(b)) return false

  if(type(a) == dictionary) {
    for key in a:
      if(!similarDataStructure(a[key], b[key])) return false
  }

  return true
}

Если вы можете придумать лучший способ глубокой проверки, дайте мне знать.

1 Ответ

1 голос
/ 08 августа 2009

Для получения типов вы можете использовать a.class, b.class и сравнить их: if(a.class == b.class) { }

Чтобы проверить, является ли это словарь, вы можете позвонить: a instanceof Map.

Однако попробуйте следующий код в консоли Groovy, чтобы увидеть его самостоятельно; -)

def src = [ username: "JennyJeans",
           message: [ subject: "Hello World!",
                      body: "Will write soon."]
         ]

def p1 = [ username: "JennyJeans",
           message: [ subject: "Hello World!",
                      body: "Will write soon."]
         ]

def p2 = [ username: "JennyJeans",
           message: [ subject: "Hello World!",
                      body: "Will read soon."]
         ]

println src == p1
println src == p2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...