传递的方法名称和类的instance_methods之间没有匹配项

时间:2013-11-12 21:54:46

标签: ruby methods match instance instance-methods

我正在动态获取方法的名称,并且我将它传递给这样的检查:

if @myObject.class.instance_methods.include?(the_passed_method_name.to_sym) then
 # Something
else
 # Some other thing
end

让我说我已经通过了“长度”或“反向”并且我检查了“String”类并且它们工作得很好。但是当我传递“bytesize”或“gsub”时它不接受它在// Something code part.It认为“gsub”不是“String”的实例方法的一部分,这是不正确的,因为当我在irb中键入它时:

"String".class.instance_methods.include?("gsub".to_sym)

返回 true 。你能提出建议吗?

1 个答案:

答案 0 :(得分:1)

我不确定可能是什么问题,但我想你的@myObject可能有问题。验证它实际上是一个String对象。


可能使代码更清晰的一些感兴趣的方法。

method_defined?

>>> String.method_defined? :gsub
true
>>> String.method_defined? :blah
false

respond_to?也可能有用

myObj = "Test"

>>>myObj.class.method_defined? :gsub
true
>>>myObj.class.method_defined? :blah
false

>>>myObj.respond_to? :gsub
true
>>>myObj.respond_to? :blah
false