【问题标题】:Tracking down a Groovy method definition?跟踪 Groovy 方法定义?
【发布时间】:2015-03-09 15:03:28
【问题描述】:

Ruby 使您能够跟踪在运行时定义方法的文件和行。因此,例如,如果您有一个名为“obj”的对象,它能够调用方法“do_something”,您可以通过以下方式跟踪其定义(在 ruby​​ 1.9 及更高版本中):

obj.method(:do_something).source_location

groovy 有任何等效的功能吗?我正在尝试追踪定义方法的位置,但事实证明这非常困难。

感谢您的帮助。

【问题讨论】:

  • 如果您只是想查看定义方法的位置,为什么不使用 IDE 的调试器进入方法调用?
  • 就我而言,intellij 不会介入其中。但是,我认为 Grails 文档中的以下内容可能解释了为什么“GORM API 已被形式化为一组类(GormStaticApi、GormInstanceApi 和 GormValidationApi),这些类在字节码级别静态连接到每个域类。结果是为 IDE 提供更好的代码完成,与 Java 更好的集成,以及为其他类型的数据存储提供更多 GORM 实现的潜力。”。这种魔法使 Rails 故障排除变得困难。可悲的是它也适用于 Grails...我希望少一些魔法。
  • 这个问题和答案可能会有所帮助:stackoverflow.com/questions/5263008/…

标签: grails groovy


【解决方案1】:

groovy 有什么等价的能力吗?

没有。您不能询问一个对象并问它一个问题,例如“如果我调用 save 方法并且不传递任何参数,哪个文件包含实际调用的 save 方法的定义以及该定义在什么行号。”。语言和运行时都没有专门为此提供便利。你可以做一些事情,比如询问堆栈以找出调用来自哪里,但这不是这里所要求的。我认为你的问题的答案是“不”。

【讨论】:

  • 我想补充一点,我们在 Groovy 中不这样做主要是因为我们编译为字节码,而 Java 字节码并没有真正通过反射提供这些信息。您可以通过抛出异常并分析跟踪来在方法中进行黑客攻击并获取信息,但在这里不会这样做,因为我们正在讨论调用之前的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-15
  • 1970-01-01
  • 2012-12-07
  • 2018-05-26
  • 1970-01-01
  • 2020-11-09
相关资源
最近更新 更多