Groovy-da dinamik tiplarning turlari

Asosiy savol: Groovy-da o'zgaruvchilar turini aniqlash uchun qanday operatorlar, xususiyatlar va boshqalardan foydalanish mumkin?

Fon:

Menda o'zboshimchalik bilan chuqur joylashtirilgan lug'at ma'lumotlar tuzilmasi mavjud. Bu Grails boshqaruvchisida request.JSON chaqiruvining natijasidir. Avvalo, ba'zi kalitlarning tegishli turlari bilan lug'atda mavjudligini tekshirishni xohlayman. Men buni amalga oshirishni xohlayman, prototipli ma'lumotlar strukturasini yaratish va ma'lumotlar tuzilmalarini solishtirish usulini aniqlash. Shunga o'xshash narsa:

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

Albatta, bu erda Strings mazmuni muhim emas. Keyin, o'z harakatlarimda men shunday tasdiqlayman:

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

Xo'sh, similarDataStructure usuli nima qiladi? Psevdokodda:

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
}

Agar chuqur tekshirishni amalga oshirishning yaxshiroq yo'li haqida o'ylay olsangiz, menga xabar bering.


person Mickey Ristroph    schedule 07.08.2009    source manba
comment
Keyinchalik o'ylab, men haqiqatan ham amalga oshirishga harakat qilayotgan narsa Grails uchun JSON sxemasi tekshiruvchisi ekanligini aniqladim.   -  person Mickey Ristroph    schedule 11.08.2009


Javoblar (1)


Turlarni olish uchun siz a.class, b.class dan foydalanishingiz va ularni solishtirishingiz mumkin: if(a.class == b.class) { }

Bu lug'at yoki yo'qligini tekshirish uchun quyidagi telefonga qo'ng'iroq qilishingiz mumkin: a instanceof Map.

Biroq, uni o'zingiz ko'rish uchun Groovy konsolida quyidagi kodni sinab ko'ring ;-)

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
person chanwit    schedule 08.08.2009