【发布时间】:2011-09-20 21:29:22
【问题描述】:
我有以下问题:
我正在重命名特定类的所有实例方法,使用 alias_method_chain 以赋予它们额外的行为。我使用以下代码行获取所有实例方法:
self.class.instance_methods(false)
通过这样做,我获得了所有实例方法,但我也获得了使用 attr_accessor / attr_reader / attr_writer 定义的 gettes 和 setter。 我需要做的是检测从上一行代码返回的哪些方法是访问器方法,因为我不想重命名它们。
显然,我可以检测方法名称是否在末尾有一个“=”,这将使它成为一个 setter,如果存在,我可以查看 getter 是否也被定义,但是当只有一个吸气剂定义?我该如何检查?特别考虑到类方法“instance_variables”的属性在初始化之前不可用?
感谢您的帮助!
【问题讨论】:
-
您可以检测方法名称是否以“=”结尾,但该方法可以手动定义。不是说,是用attr_accessor/attr_writer定义的。
标签: ruby-on-rails ruby metaprogramming