ruby - 从使用示例中实现一个类

标签 ruby class

我需要通过构建“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/

相关文章:

swift - 如何在类中打印函数

ruby - 如何使用#{variable} 在 Ruby 中格式化带有 float 的字符串?

ruby - 为什么 IO#seek 不适用于 TCPSocket?

json - 如何以编程方式运行 rspec 测试并捕获输出?

python - 为什么我应该在 python 中使用类?

php - 函数内声明函数的作用域

ruby - Rails 根据 Action 隐藏表单字段

ruby - 打开3并停止进程

c++ - 在类成员函数中创建一个动态数组

c# - 从类调用寻呼