在执行外部类'之后创建内部类对象;Ruby中的构造函数是什么?

在执行外部类'之后创建内部类对象;Ruby中的构造函数是什么?,ruby,class,constructor,inner-classes,Ruby,Class,Constructor,Inner Classes,我想为类中的内部类创建对象。所有内部类方法都使用一个公共变量,在创建外部类时需要初始化该变量 class A @x = nil @y = nil def initialize(x, y) @x = x @y = y end class B def func_b puts "x- #{@x} and y- #{@y} in class B" end end

我想为类中的内部类创建对象。所有内部类方法都使用一个公共变量,在创建外部类时需要初始化该变量

class A
    @x = nil
    @y = nil
    def initialize(x, y)
        @x = x
        @y = y
    end

    class B
        def func_b
            puts "x- #{@x} and y- #{@y} in class B"
        end
    end

    class C
        def func_c
            puts "x- #{@x} and y- #{@y} in class C"
        end
    end
end
我能够为类
B
C
创建对象

#1
b = A::B.new
#2
a = A
c = a::C.new
但是我想在为
B
C
创建对象之前初始化
A

差不多

a = A.new(4,5)
b = a::C.new
但这似乎不起作用。我应该如何做上述

class A
    def initialize(x, y)
        @x = x
        @y = y
    end
end

class B < A
    def func_b
        puts "x- #{@x} and y- #{@y} in class B"
    end
end

class C < A
    def func_c
        puts "x- #{@x} and y- #{@y} in class C"
    end
end

c = C.new(4,5)
c.func_c

这似乎很好:)

Ruby中的嵌套模块和类主要是组织上的选择。比较一下这个

class A; end
class B; end
还有这个

class A
  class B; end
end
这两者之间只有两个区别

  • 在第二个示例中,必须编写
    A::B
    才能访问
    B
  • 在第二个示例中,在
    B
    中访问的常量将在
    A
    中查找,然后再在顶级中查找
  • 如果您确实希望这些类的实例是相关的,则需要它们之间的子类和超类关系,即

    class B < A; end
    
    但这只是组织上的差异


    另一方面,这个

    class A
      @x = nil
      @y = nil
    end
    
    不做你认为它能做的事。这是在
    A
    本身上设置实例变量,即将
    A
    视为
    A.singleton\u类的实例。如果您想要
    A
    实例的默认值,则必须在
    初始化中设置这些值:

    class A
      def initialize
        @x = nil
        @y = nil
      end
    end
    
    这个“解决方案”与你的要求无关。。。您应该更多地阅读OOP,因为您似乎不知道表达这些概念的正确语言。
    class A
      @x = nil
      @y = nil
    end
    
    class A
      def initialize
        @x = nil
        @y = nil
      end
    end