You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby Bootcamp作业:Boat类设置color属性方法不生效问题排查

Ruby代码问题排查及修正

核心错误原因

你未按照Ruby的规则编写color属性的可写方法:Ruby中支持对象.属性 = 新值这种赋值语法的前提是,类中定义了名为属性名=的setter方法,你当前定义的def boat_2(text)方法名不符合要求,自然无法响应boat_2.color = "red"的调用。

修正后可运行代码

boat_1 = { "name" => "S. S. Minnow", "color" => "white", "price" => 20000 }
boat_2 = { "name" => "Titanic", "color" => "black", "price" => 700000000 }

class Boat
    def initialize(name, color, price)
        @name = name
        @color = color
        @price = price
    end

    # name属性读取方法(原有代码正确)
    def name
        @name
    end

    # color属性读取方法(原有代码正确)
    def color
        @color
    end

    # 替换原有错误的boat_2方法,改为正确的color属性写入方法
    def color=(new_color)
        @color = new_color
    end
end

boat_1 = Boat.new("S. S. Minnow", "white", 20000 )
boat_2 = Boat.new("Titanic", "black", 700000000)

p boat_1
p boat_2

p boat_1.name
boat_2.color = "red"
p boat_2.color # 运行后将正确输出 "red"

补充优化建议

如果作业没有强制要求手动实现属性读写方法,可以用Ruby内置的语法糖简化代码,直接在Boat类中添加两行声明即可,效果和手动写的get/set方法完全一致:

class Boat
  # 定义name、color的可读属性,自动生成对应的getter方法
  attr_reader :name, :color
  # 定义color的可写属性,自动生成对应的setter方法
  attr_writer :color

  def initialize(name, color, price)
    @name = name
    @color = color
    @price = price
  end
end

内容的提问来源于stack exchange,提问作者Philip Jobe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 12:27:02