如何在Ruby中初始化类数组

如何在Ruby中初始化类数组,ruby,Ruby,我想在Ruby中创建一个空数组作为类实例变量。然而,我目前的方法似乎不起作用 这是我的密码: class Something @something = [] def dosomething s = 5 @something << s end end 分类 @某物=[] def剂量测定法 s=5 @一些您需要使用initialize作为构造函数,如下代码所示,是否有任何理由不使用initialize/constructor。请

我想在Ruby中创建一个空数组作为类实例变量。然而,我目前的方法似乎不起作用

这是我的密码:

class Something 
    @something = []
    def dosomething
        s = 5
        @something << s
    end
end
分类
@某物=[]
def剂量测定法
s=5

@一些您需要使用initialize作为构造函数,如下代码所示,是否有任何理由不使用initialize/constructor。请修复类定义
class Something
class Something
中的打字错误,在课堂上不要使用驼峰大小写或首字母大写

class Something 
      def initialize
        @something = Array.new
      end
      def dosomething
        s = 5
        @something << s
      end
    end
分类
def初始化
@something=Array.new
结束
def剂量测定法
s=5

@一些您需要使用initialize作为构造函数,如下代码所示,是否有任何理由不使用initialize/constructor。请修复类定义
class Something
class Something
中的打字错误,在课堂上不要使用驼峰大小写或首字母大写

class Something 
      def initialize
        @something = Array.new
      end
      def dosomething
        s = 5
        @something << s
      end
    end
分类
def初始化
@something=Array.new
结束
def剂量测定法
s=5

@一开始你有一个打字错误。将
Class
更改为
Class
。接下来,我建议使用initialize方法。创建新对象时,这是初始化实例变量的最佳位置

class Something
  @@my_class_variable = [1]

  def initialize
    @something = []
  end

  def dosomething
    s = 5
    @something << s
  end

  def self.get_my_class_variable
    @@my_class_variable
  end
end
现在可以从类中创建实例。使用
Something.new
将调用initialize方法并定义实例变量

something = Something.new
something.dosomething
# => [5]
稍后,如果您熟悉这一点,您可以使用
attr\u reader
attr\u writer
attr\u accessor
为实例对象或
catr\u reader
catr\u writer
catr\u accessor
为类对象定义getter和setter方法。例如:

class Something
  attr_reader :my_something

  def initialize
    @my_something = []
  end

  def dosomething
    s = 5
    @my_something << s
  end
end

something = Something.new
something.my_something
# => []
something.dosomething
# => [5]
something.my_something
# => [5]
分类
读者:我的什么
def初始化
@我的某物=[]
结束
def剂量测定法
s=5
@我的东西
某物,某物
# => [5]
我的东西
# => [5]

一开始你有一个打字错误。将
Class
更改为
Class
。接下来,我建议使用initialize方法。创建新对象时,这是初始化实例变量的最佳位置

class Something
  @@my_class_variable = [1]

  def initialize
    @something = []
  end

  def dosomething
    s = 5
    @something << s
  end

  def self.get_my_class_variable
    @@my_class_variable
  end
end
现在可以从类中创建实例。使用
Something.new
将调用initialize方法并定义实例变量

something = Something.new
something.dosomething
# => [5]
稍后,如果您熟悉这一点,您可以使用
attr\u reader
attr\u writer
attr\u accessor
为实例对象或
catr\u reader
catr\u writer
catr\u accessor
为类对象定义getter和setter方法。例如:

class Something
  attr_reader :my_something

  def initialize
    @my_something = []
  end

  def dosomething
    s = 5
    @my_something << s
  end
end

something = Something.new
something.my_something
# => []
something.dosomething
# => [5]
something.my_something
# => [5]
分类
读者:我的什么
def初始化
@我的某物=[]
结束
def剂量测定法
s=5
@我的东西
某物,某物
# => [5]
我的东西
# => [5]

尝试访问实例方法中的
@something
时遇到的问题是,在实例方法的范围内,
@
变量指实例变量,而
@something
是类实例变量

@
变量是实例的实例变量,该实例在创建时为
self
。当
@something
被创建时,
self
是类
something
,而不是某事物的实例,在实例方法中就是这样


那么,如何在实例方法中访问类实例变量呢?与常规实例变量一样,这必须通过方法完成,如
attr\u accessor
。一种方法是使用
class在您的实例方法中尝试访问
@something
的问题是,在实例方法的范围内,
@
变量指实例变量,而您的
@something
是类实例变量

@
变量是实例的实例变量,该实例在创建时为
self
。当
@something
被创建时,
self
是类
something
,而不是某事物的实例,在实例方法中就是这样


那么,如何在实例方法中访问类实例变量呢?与常规实例变量一样,这必须通过方法完成,如
attr\u accessor
。一种方法是使用
class您已经正确创建了一个class实例变量
@something
,并将其初始化为空数组。实例有两种方法获取或更改该变量的值。一种是使用方法和(在类上调用):

在您的
dosomething
方法中,您可以编写:

self.class.something << s

self.class.something您已经正确创建了类实例变量
@something
,并将其初始化为空数组。实例有两种方法获取或更改该变量的值。一种是使用方法和(在类上调用):

在您的
dosomething
方法中,您可以编写:

self.class.something << s

self.class.something通常
[]
Array.new
更可取,除非你做的事情涉及到向
new
传递参数,比如
Array.new(10)
。是的,在上述情况下,发送参数是没有用的:)所以我更喜欢Array.new..这是你个人的偏好,但是大多数Ruby风格的指南都反对它,认为它是不必要的杂乱。类变量不是全局变量。全局变量可用于Ruby对象空间中的任何对象。@@@变量仅对定义它们的类及其子类可用。是的,谢谢Keith Bennet Updated通常
[]
数组更可取。new
除非您正在做一些涉及将参数传递给
new
的事情,如
数组。new(10)
。是的,
self.class.something << s