.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
却起作用了(因为它绕过了隐私)。这似乎是解决我问题的线索,但是我仍然无法提出解释,也找不到找到执行任务的正确方法。
有人可以启发我吗?
答案 0 :(得分:1)
回答我自己的问题:这只是我想到的,我可以使用
private_methods.include?(:foo)
这确实有效,但是对我来说似乎有点像黑客。如果有人知道更好的方法,请告诉我。