我正在尝试在OOP中构建一个控制台电梯模拟器。我声明了三个属性:currentFloor
,minFloor
和maxFloor
以及attr_accessor
。
在currentFloor
阅读器方法中,如何检查该值是否大于maxFloor
或低于minFloor
?
答案 0 :(得分:1)
根据您的要求,我有一个可以帮助您的解决方案。
你可以这样定义
class Elevator
attr_accessor :current_floor, :min_floor, :max_floor
def initialize(current_floor, min_floor, max_floor)
@current_floor = current_floor
@min_floor = min_floor
@max_floor = max_floor
end
end
现在您可以将值分配给全部三个attr_accessor
elevator = Elevator.new(100,150,500)
现在检查获取attr_accessor的值,并检查你想要的条件
if elevator.current_floor > elevator.max_floor
// perform operation here
else
// perform operation here
end
如果您还有任何疑问,请告诉我们。
答案 1 :(得分:0)
请参考What is attr_accessor in Ruby?了解不同的内容:
attr_accessor
:定义默认的getter和setter
attr_reader
:定义默认的getter
attr_writer
:定义默认设置器
取决于你需要什么,你应该自定义getter或setter,在你的例子中,如果你想自定义你的读者方法:
class Elevator
attr_writer :currentFloor
def currentFloor
if some_condition_check
raise error
end
currentFloor
end
end
但更常见的是,你应该自定义你的setter而不是getter,在这种情况下:
class Elevator
attr_reader :currentFloor
def currentFloor=(current)
if some_condition_check
raise error
end
@currentFloor = current
end
end