【发布时间】:2020-02-10 23:56:03
【问题描述】:
在这个问题中:
How to list all methods for an object in Ruby?
您可以调用foo.methods 并获取所有方法。但这并没有得到所有的方法。 Rails 中的示例,带有 ActiveStorage:
Image.first.specimens.first.methods.include?(:variant)
# => false
Image.first.specimens.first.respond_to?(:variant)
# => true
Image.first.specimens.first.variant
Traceback (most recent call last):
1: from (irb):3
ArgumentError (wrong number of arguments (given 0, expected 1))
Image.first.specimens.first.method(:variant)
# => #<Method: ActiveStorage::Attachment(id: integer, name: string, record_type: string, record_id: integer, blob_id: integer, created_at: datetime)#variant>
鉴于正在引发 ArgumentError,它 respond_to?s,我可以获取该方法,它确实具有变体方法。但它没有与.methods 一起显示。如何查看完整的方法列表?
【问题讨论】:
-
“鉴于 [....] 它确实有变体方法” – 你的结论是错误的。消息和方法密切相关,但通常彼此独立。对象可以响应消息而无需实现具有相同名称的方法。一个对象也可以实现某种方法而不响应相应的消息。
标签: ruby