我创建了一个类例如
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
在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)
如果没有传入值,这将初始化min并max为零.
所以现在,你的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)