【问题标题】:Types of dynamic types in GroovyGroovy 中的动态类型类型
【发布时间】:2009-08-07 20:04:20
【问题描述】:

主要问题:在 Groovy 中可以使用哪些运算符、属性等来确定变量的类型?

背景:

我有一个任意深度嵌套的字典数据结构。这是在 Grails 控制器中调用 request.JSON 的结果。我首先想验证某些键是否在字典中,具有适当的类型。我想实现这一点的方法是创建一个原型数据结构并定义一个比较数据结构的方法。比如:

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

当然,这里的Strings的内容无关紧要。然后,在我的行动中,我这样验证:

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
}

如果您能想到更好的深度验证方法,请告诉我。

【问题讨论】:

  • 进一步思考,我发现我真正想要实现的是 Grails 的 JSON 模式验证器

标签: json grails groovy


【解决方案1】:

要获取类型,可以使用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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 2021-01-04
    • 2010-12-02
    • 2012-07-11
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多