ruby - 如何在 Ruby 中的命名空间类上调用命名空间方法

标签 ruby oop class module

我正在模块中编写一些类:

module A
end

module A::B
  def foo
    print "foo"
  end
end

class A::B::C
end

A::B::C.new.foo # => NoMethodError: undefined method `foo' for #<A::B::C...>

如何在模块 B 中定义方法以在类 C 中调用?

最佳答案

就好像你写:

module A::B
  def foo
    print "foo"
  end

  class C
  end
  print 'C.instance_methods : '; p C.instance_methods(false)
  #=> C.instance_methods : []
end

C不会自动继承 foo .继承实例方法只有两种方式:

  1. class C < super_class其中 super_class是一个返回类的表达式

  2. 包含一个模块:

    class C
      include <some module>
    

有关父类(super class)链的解释,请参阅 How does Inheritance work in Ruby?Ruby: Module, Mixins and Blocks confusing?

关于ruby - 如何在 Ruby 中的命名空间类上调用命名空间方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14501291/

相关文章:

ruby - 计算 ruby 汉明距离的最有效方法?

ruby - 续集 gem 身份/自然元素

c# - oops概念查询

java - 设置我的武器类别时遇到问题

html - rails haml span 正在结束 "early"- 为什么?

java - 多层继承 - Java

python - 如何在Python中将所有引用变量设置为None?

python - 如何在类中实现websocket?

php - 如何使用别名调用特征方法

ruby-on-rails - 限制对 Rails 引擎路由的访问...约束不起作用