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
相关产品推荐
相关产品推荐

