0

我正在动态获取方法的名称,并通过它进行如下检查:

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

假设我已经通过了“length”或“reverse”并且我检查了“String”类并且它们工作得非常好。但是当我通过“bytesize”或“gsub”时它在/中不接受它/Something 代码部分。它认为“gsub”不是“String”实例方法的一部分,这是不正确的,因为当我在 irb 中键入它时:

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

它返回true。你能给个建议吗?

4

1 回答 1

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
于 2013-11-12T22:08:28.443 回答