我需要通过构建“Car”类来使以下代码发挥作用。我觉得我必须忽略一些简单的事情。任何帮助,将不胜感激。 # 表示预期的输出
# Make the following code functional by building a Car class
c = Car.new("blue")
puts c.color # blue
puts c.repaint_count # 0
c.paint("red")
c.paint("green")
puts c.repaint_count # 2
puts c.color # green
这是我所做的:
class Car
@@repaint_count = 0
def initialize(color)
@color = color
end
def self.paint(color)
@color = color
@@repaint_color += 1
end
def self.color
@color
end
end
我想我被 c.color/c.paint 抛出了:我应该定义这些方法并将它们设置为等于类还是其他?我想我遗漏了一些关于类和继承的东西。
最佳答案
I guess I am being thrown by the c.color / c.paint: should I be defining these methods and setting them equal to class or something else ? I think I am missing something about classes and inheritance.
我认为实际上您在现阶段担心这些事情会使事情变得过于复杂。问题不在于继承。尽管在某些方面它没有明确说明,因为可能会误解问题文本并将某些属性分配给实例以外的类。
所以首先,您已经知道问题要求您实现一个 Car
类,并且有一个内部状态可以跟踪当前颜色及其变化的次数。您部分地误解了重绘计数并将其设为类变量。它需要是一个实例变量 - 它旨在成为特定汽车被重新喷漆的次数,而不是任何汽车被重新喷漆的次数。尽管示例数字相同,但不同之处在于问题要求 c.repaint_count
而不是 Car.repaint_count
,而 c
是一个Car
的实例,因此您希望将计数存储为实例变量 - 在构造函数中将其设置为 0
。
您的访问器代码中存在类似的混淆。 Ruby 对 self
的使用有点令人困惑——它改变了代码中上下文的含义。如果您将 def self.paint
更改为 def paint
并且对于 color
同样如此,那么随着上一段的更改,您就完成了.
最后一件事,您需要实现 repaint_count
访问器,类似于您对 color
所做的那样(同样,没有 self.
这将使它成为一个类方法)
关于ruby - 从使用示例中实现一个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20908166/