我想了解Ruby方法的methods()工作方式。
我尝试使用“红宝石方法”访问Google,但这不是我所需要的。
我也看过ruby-doc.org,但没有找到这种方法。
您能否详细说明它的工作原理或给我链接?
我尝试了methods()方法,并得到了以下结果:
class First
def first_instance_mymethod
end
def self.first_class_mymethod
end
end
class Second < First
def second_instance_mymethod
end
def self.second_class_mymethod
end
end
Run Code Online (Sandbox Code Playgroud)
#returns available methods list for class and ancestors
puts Second.methods.grep(/mymethod/)
# => second_class_mymethod
# => first_class_mymethod
#returns Class methods list for current class only
puts Second.methods(false)
# => second_class_mymethod
Run Code Online (Sandbox Code Playgroud)
obj = Second.new
def obj.obj_singleton_mymethod
end
#returns available methods list for object and ancestors
puts obj.methods.grep(/mymethod/)
# => second_instance_mymethod
# => first_instance_mymethod
#returns current object class methods
puts obj.methods(false)
# => obj_singleton_mymethod
Run Code Online (Sandbox Code Playgroud)
可接受的答案略有不足。keymone在注释中给出了更完整的答案-.methods返回一个符号数组,该符号数组是在给定实例上定义的所有方法的名称。例如:
irb(main):012:0> object = ""
=> ""
irb(main):013:0> object.instance_eval("def foo;:bar;end")
=> nil
irb(main):014:0> object.methods.include?(:foo)
=> true
irb(main):016:0> "".methods.include?(:foo)
=> false
Run Code Online (Sandbox Code Playgroud)
小智 3
我不完全确定为什么它不在 ruby 1.9 文档中(它似乎仍在代码中),但您可以在 1.8.7 文档中查看文档:http://www.ruby-doc.org/ core-1.8.7/classes/Object.html#M000032
基本上,在 ruby 1.9 中,它只返回给定类及其祖先中所有方法的符号(名称)列表。(ruby 1.8 它返回一个字符串列表)
| 归档时间: |
|
| 查看次数: |
7017 次 |
| 最近记录: |