ruby - 继承改变方法类

标签 ruby inheritance

以下打印 Bar 两次:

class Foo
  def foo
    p self.class # => prints Bar
  end
end

class Bar < Foo
  def foo
    p self.class # => prints Bar
    super
  end
end

b = Bar.new
b.foo

如何打印出来

Bar
Foo

?即我想知道每个方法定义在哪个类上。

最佳答案

要捕获最初定义方法的上下文,您可以使用 define_method 而不是 def 来获得适当的闭包。一个简单的例子:

class Foo

  klass = self
  define_method(:foo){p klass}

end

class Bar < Foo

  def foo
    p self.class
    super
  end

end

b = Bar.new

b.foo

关于ruby - 继承改变方法类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23528378/

相关文章:

css - bootstrap 与 font-awesome 冲突?

Python:变量、继承和默认参数

c++ - vector<unique_ptr> 的初始化因复制错误而失败

c++ - C++如何知道子类调用父方法?

css - 在 Sinatra 应用程序的 layout.html.erb 中使用 if 语句

ruby-on-rails - ruby rails : compare two strings in terms of database collation

ruby - 等待文本出现

java - Java中关于多个类的继承

c++ - ostream 运算符重载 - 继承

ruby:在 ruby​​ 中从 float 转换为整数会产生奇怪的结果