Ruby 如何获得IRB中仅我可用方法的列表?
假设我将一些代码加载到Ruby 如何获得IRB中仅我可用方法的列表?,ruby,Ruby,假设我将一些代码加载到irb中,如下所示: class MyClass def m #... something end def a #... something end end 我如何才能获得一个仅包含可用方法的列表?如果我运行MyClass.new.methods我将返回所有可用的实例方法 我想看看::m,:a 此外,如果我的方法没有包装在类中,该怎么办 def x #... something end def z #... something
irb
中,如下所示:
class MyClass
def m
#... something
end
def a
#... something
end
end
我如何才能获得一个仅包含可用方法的列表?如果我运行MyClass.new.methods
我将返回所有可用的实例方法
我想看看::m,:a
此外,如果我的方法
没有包装在类
中,该怎么办
def x
#... something
end
def z
#... something
end
如何查看可用的内容?调用self.methods
(运行:methods
)甚至不会列出我的方法。使用以下命令执行以下操作:
返回一个数组,该数组包含接收方中公共和受保护实例方法的名称。对于模块,这些是公共和受保护的方法;对于类,它们是实例(而不是单例)方法。如果没有参数,或者参数为false,则返回mod中的实例方法,否则返回mod和mod的超类中的方法
如果像下面这样在顶层定义方法,它们将成为对象的实例方法。所以我会用
返回mod中定义的私有实例方法的列表。如果可选参数不为false,则包含任何祖先的方法
这是我经常使用的一个小技巧,特别是当我试图使用我没有编写的库中的对象时:
obj = MyClass.new
obj.methods.sort - 0.methods # => [:a, :m]
数字0
有一小部分方法,这些方法大部分都是您不想看到的标准Ruby内容。您可以使用Object.new
而不是0
,这会更好,因为您可以看到类似succ
的方法,但它需要更多的键入
与MyClass.instance_methods(false)
相比,它的优势在于它显示了超类中包含的方法、模块中包含的方法以及动态定义的方法。
另外,您通常有一个要检查的对象,而不是一个类。Nice!如果没有类
?那真是太棒了+1,我实际上得到了[:default\u src\u encoding,:irb\u binding,:x,:z]
使用:对象。private\u instance\u方法(false)
可能是因为我的Windows框?将在我的Mac上重新测试。谢谢很好的解释,非常感谢+1MyClass.new.methods-Object.new.methods
效果很好,但是直接访问不在类范围内的私有实例方法如何?您是否有@Arup的替代解决方案:Object.private\u instance\u方法(false)
?这不是问题:obj.class
def x
#... something
end
def z
#... something
end
Object.private_instance_methods(false)
# => [:x, :z]
obj = MyClass.new
obj.methods.sort - 0.methods # => [:a, :m]