我正在动态获取方法的名称,并且我将它传递给这样的检查:
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 。你能提出建议吗?
答案 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