Ruby和.irbrc:查找是否定义了一个方法。

时间:2018-07-24 15:34:00

标签: ruby irb

.irbrc中有一个函数,该函数基本上从某些输入参数构建一个字符串,然后应该检查是否存在具有该字符串名称的另一个函数。我就是这样

methodname = ... # Calculate a string
if respond_to?(methodname)
  ....
end

这不适用于那个response_to吗?即使在我认为应该返回true的情况下也返回false。我将问题归结为以下简单情况:

我的.irbrc中有

def foo
end
def respond_to_foo?
  respond_to?(:foo)
end
puts "Respond: #{respond_to_foo?}"

运行irb,这将输出 false 。我希望它会打印 true 。不过,我仍然可以从irb中运行foo

我想这与irb定义我的方法的范围有关。例如,self.foo不起作用( main:Object 调用了私有方法'foo'),而send.foo却起作用了(因为它绕过了隐私)。这似乎是解决我问题的线索,但是我仍然无法提出解释,也找不到找到执行任务的正确方法。

有人可以启发我吗?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题:这只是我想到的,我可以使用

private_methods.include?(:foo)

这确实有效,但是对我来说似乎有点像黑客。如果有人知道更好的方法,请告诉我。