是否有可能在Ruby中识别别名方法?
通常在控制台内,我会查询一个对象
pp obj.methods.sort #or... pp (obj.methods - Object.methods).sort
在Ruby中,开发人员为方法提供别名是很常见的。 我想知道是否有一种识别别名的reflection方式,以便我可以显示别名方法,如…
array.aliased_methods #=> {:collect => :map, ...}
这有助于能够准确识别对象可以做多少事情。
在Ruby 1.9中,别名实例方法将是eql?
,所以你可以定义:
class Module def aliased_methods instance_methods.group_by{|m| instance_method(m)}. map(&:last).keep_if{|symbols| symbols.length > 1} end end
现在,如果你尝试它,你会得到:
class Foo def bar; 42 end alias baz bar def hello; 42 end end Foo.aliased_methods # => [[:bar, :baz]] Array.aliased_methods # => [[:inspect, :to_s], [:length, :size]]
请注意,缺少一些对,例如[:map, :collect]
。 这是因为现在修复了一个错误,并且将在下一个版本(2.0.0)中。如果它对您很重要,您可以在不使用散列或eql?
情况下滚动自己的group_by
eql?
并且只使用==
。
并不是的。 别名不仅仅是一个指针或类似的东西,在别名后你可以取消第一个方法,并且别名方法不会改变(想想硬链接vs sym链接)。 通常,别名会反映在rdoc中,因此我会去那里寻找明确的列表。
- Rest-Client获取authenticity_token以创建新记录
- Rails 4 – Heroku Sqlite3错误
- 如何在低内存系统上使用RVM编译ruby?
- 我使用Active Admin和Devise获得ActiveModel :: ForbiddenAttributesError
- 使用uuidtools在Rails中生成一个简短的UUID字符串
- ruby,rails gem install error – 错误:执行gem时…(编码:: UndefinedConversionError)
- Ruby在数组中找到偏移量
- 如何显示个别微博的链接? (铁轨上的ruby3)
- 如何在ruby回溯中获取源和变量值?