ruby - Ruby 方法#owner 返回什么?

标签 ruby

在 Ruby 2.1.2p95 中,我想检查一个类方法是使用定义在其中的同一个类调用的,还是使用子类调用的。也就是说,发生了以下哪些情况:

Parent.my_method

Child.my_method

我试过这个:

def self.my_method
  if self == self.method(__method__).owner
    puts "called in Parent"
  end
end

但是 self 返回类的名称,例如'Parent'Method#owner 返回如下内容:

#<Class:Parent>

那么,嗯,那是什么?

有没有一种巧妙的方法来测试调用的是父类还是子类?


为清楚起见更新:我只在父类中定义一个类方法。我没有压倒一切。我只是直接 (Parent.my_method) 或通过子类 (Child.my_method) 调用父类方法,我希望能够分辨出它们的区别。

最佳答案

  • 那么,嗯,那是什么?

    那是对类Parent的单例类的检查.类方法定义为原始类的单例类的实例方法。

  • 是否有巧妙的方法来测试调用的是父类还是子类?

    <罢工>是的。子类不从其父类继承类方法。因此,如果一个类方法可以无错误地调用,那么它就是在该类实例上定义的。如果它引发未定义的错误,那么它没有在该类实例上定义。

关于ruby - Ruby 方法#owner 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24860756/

相关文章:

ruby-on-rails - 设置activeadmin gem后Rails api脚手架问题

ruby-on-rails - 简单 Action Controller 出错

ruby-on-rails - Rails 字符串替换 URL 参数

ruby-on-rails - rails 中的数组参数是否保证按照它们在 url 中出现的顺序排列?

javascript - 使用 Carrierwave 发布 gif 时,AJAX 无法验证 CSRF token 的真实性

c - 是否可以将 ruby​​ ffi 附带的功能设为私有(private)?

ruby - 数字 = 1-5,列表 = [1,3,4]。如何取回列表 [2,5]?

ruby - elasticsearch-logstash时差计算(ELK 5.3)

ruby - 减少数字数组(序列)

ruby - 使用 watir webdriver 或 selenium 设置 cookie