打印ruby文件中定义的所有方法

打印ruby文件中定义的所有方法,ruby,methods,Ruby,Methods,我想打印所有自由方法(类或模块之外) 考虑这个例子 def func_a 结束 定义函数 结束 放置“所有方法:{the_magic_method.join}” 输出应该包含我的两个方法 我知道,对于类(例如string),我可以使用string.methods。在Ruby中定义自由函数时,它们会成为对象类上的私有方法。对象类有一个默认实例,它是类块外部ruby代码的自上下文,称为主实例 initial_methods = private_methods def func_a end d

我想打印所有自由方法(类或模块之外)

考虑这个例子

def func_a
结束
定义函数
结束
放置“所有方法:{the_magic_method.join}”
输出应该包含我的两个方法



我知道,对于类(例如string),我可以使用string.methods。

在Ruby中定义自由函数时,它们会成为对象类上的私有方法。对象类有一个默认实例,它是类块外部ruby代码的自上下文,称为主实例

initial_methods = private_methods

def func_a
end

def func_b
end

final_methods = private_methods
new_methods = final_methods - initial_methods


puts "#{new_methods.join}"

仅返回类中定义的方法。

令我惊讶的是,这不起作用(在ruby 2.6.5和2.4.1中测试)。差异是空的<代码>方法(:func_a)存在,但是
方法。包括(:func_a)
。非常奇怪…是的,是一样的,我最初在pry进行了测试,它在那里工作,但环境一定有所不同。我需要修改这个答案你确定它们是私人方法吗?因为我看到
methods
包括它,但不包括
private\u方法
,所以我在IRB和PRY下运行了不同的结果,它们在methods下运行。当一个文件被提供给解释器时,它们只显示在私有方法下,而不是被询问的内容。没有“免费”方法。每一个方法都属于一个对象。在你的例子中,你会考虑<代码>放置< /代码>一个“免费方法”吗?不知道你为什么要这样做,但是你可以使用<代码>方法>添加/ <代码>钩子,由<代码>模块< /Cord>类提供。
User.methods(false)