Vla*_*nov 92 ruby reflection ruby-1.9.2
我有一节课:
class TestClass
def method1
end
def method2
end
def method3
end
end
Run Code Online (Sandbox Code Playgroud)
我怎样才能在这个类的我的方法列表(method1,method2,method3)?
And*_*imm 109
你真的想要TestClass.instance_methods,除非你对TestClass自己能做什么感兴趣.
class TestClass
def method1
end
def method2
end
def method3
end
end
TestClass.methods.grep(/method1/) # => []
TestClass.instance_methods.grep(/method1/) # => ["method1"]
TestClass.methods.grep(/new/) # => ["new"]
Run Code Online (Sandbox Code Playgroud)
或者你可以调用methods(而不是instance_methods)对象:
test_object = TestClass.new
test_object.methods.grep(/method1/) # => ["method1"]
Run Code Online (Sandbox Code Playgroud)
Bij*_*jan 107
TestClass.methods(false)
Run Code Online (Sandbox Code Playgroud)
仅获取属于该类的方法.
TestClass.instance_methods(false)
将返回给定示例中的方法(因为它们是TestClass的实例方法).
Pav*_*ing 36
TestClass.instance_methods
Run Code Online (Sandbox Code Playgroud)
或者没有所有继承的方法
TestClass.instance_methods - Object.methods
Run Code Online (Sandbox Code Playgroud)
(是'TestClass.methods - Object.methods')
$ irb --simple-prompt
class TestClass
def method1
end
def method2
end
def method3
end
end
tc_list = TestClass.instance_methods(false)
#[:method1, :method2, :method3]
puts tc_list
#method1
#method2
#method3
Run Code Online (Sandbox Code Playgroud)
根据 Ruby Doc instance_methods
返回一个数组,其中包含接收者中公共和受保护实例方法的名称。对于模块来说,这些是公共方法和受保护方法;对于类来说,它们是实例(而不是单例)方法。如果可选参数为 false,则不包括任何祖先的方法。我以官方文档为例。
module A
def method1()
puts "method1 say hi"
end
end
class B
include A #mixin
def method2()
puts "method2 say hi"
end
end
class C < B #inheritance
def method3()
puts "method3 say hi"
end
end
Run Code Online (Sandbox Code Playgroud)
让我们看看输出。
A.instance_methods(false)
=> [:method1]
A.instance_methods
=> [:method1]
B.instance_methods
=> [:method2, :method1, :nil?, :===, ...# ] # methods inherited from parent class, most important :method1 is also visible because we mix module A in class B
B.instance_methods(false)
=> [:method2]
C.instance_methods
=> [:method3, :method2, :method1, :nil?, :===, ...#] # same as above
C.instance_methods(false)
=> [:method3]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
92939 次 |
| 最近记录: |