在Ruby中初始化类对象变量

Beg*_*ner 3 ruby

我创建了一个类例如

class Result
    @@min = 0
    @@max = 0
    def initialize(min, max)
        @@max.min = min
        @@max.max = max
    end
end

result = Result.new(1, 10)
result.max
Run Code Online (Sandbox Code Playgroud)

和其他郎一样.像php,C#等我已经创建了一个类并传递了一个值,因为它有初始化方法,它现在应该包含对象值,但是当我尝试打印出来时

puts result.min
puts result.max
Run Code Online (Sandbox Code Playgroud)

它说未定义的方法 min

dav*_*000 8

在Ruby中,@@变量之前意味着它是一个类变量.您需要的是在@变量之前创建实例变量的单个变量.当您这样做时Result.new(..),您正在创建该类的实例Result.

您不需要像这样创建默认值:

@@min = 0
@@max = 0
Run Code Online (Sandbox Code Playgroud)

你可以在initialize方法中做到这一点

def initialize(min = 0, max = 0)
Run Code Online (Sandbox Code Playgroud)

如果没有传入值,这将初始化minmax为零.

所以现在,你的initialize方法应该像

def initialize(min=0, max=0)
    @min = min
    @max = max
end
Run Code Online (Sandbox Code Playgroud)

现在,如果您希望能够在类的实例上调用.min.max方法,则需要创建这些方法(称为setter和getter)

def min # getter method
  @min
end

def min=(val) # setter method
  @min = val
end
Run Code Online (Sandbox Code Playgroud)

现在,你可以这样做:

result.min     #=> 1
result.min = 5 #=> 5
Run Code Online (Sandbox Code Playgroud)

Ruby有这些setter和getter的快捷方式:

  • attr_accessor:创建setter和getter方法.
  • attr_reader:创建getter方法.
  • attr_writer:创建setter方法.

要使用它们,您只需要这样做attr_accessor :min.这将创建两种方法min,因此您可以直接通过实例对象调用和设置最小值.

现在,您的代码应该如下所示

class Result
    attr_accessor :min, :max
    def initialize(min=0, max=0)
        @min = min
        @max = max
    end
end

result = Result.new(1, 10)
result.max #=> 10
Run Code Online (Sandbox Code Playgroud)