通常在控制台内,我会查询一个对象
pp obj.methods.sort #or...
pp (obj.methods - Object.methods).sort
Run Code Online (Sandbox Code Playgroud)
在Ruby中,开发人员为方法提供别名是很常见的.我想知道是否有一种识别别名的反射方式,以便我可以显示别名方法,如...
array.aliased_methods #=> {:collect => :map, ...}
Run Code Online (Sandbox Code Playgroud)
这有助于能够准确识别对象可以做多少事情.
Mar*_*une 15
在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
Run Code Online (Sandbox Code Playgroud)
现在,如果你尝试它,你会得到:
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]]
Run Code Online (Sandbox Code Playgroud)
请注意,缺少一些对,例如[:map, :collect].这是因为现在修复了一个错误,并且将在下一个版本(2.0.0)中.如果它对您很重要,您可以自行滚动group_by而不使用哈希或eql?仅使用==.
| 归档时间: |
|
| 查看次数: |
805 次 |
| 最近记录: |