在红宝石中,@@
变量前面的表示它是一个类变量。你需要的是单身@
在变量之前创建实例变量。当你这样做时Result.new(..)
,您正在创建该类的一个实例Result
.
您不需要像这样创建默认值:
@@min = 0
@@max = 0
您可以在initialize
method
def initialize(min = 0, max = 0)
这将初始化min
and max
如果没有传入值则为零。
所以现在,你的initialize
方法应该像这样
def initialize(min=0, max=0)
@min = min
@max = max
end
现在,如果您希望能够致电.min
or .max
类实例上的方法,您需要创建这些方法(称为 setter 和 getter)
def min # getter method
@min
end
def min=(val) # setter method
@min = val
end
现在,您可以这样做:
result.min #=> 1
result.min = 5 #=> 5
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