为什么这个Ruby代码不起作用?

时间:2014-07-11 20:10:38

标签: ruby

我是编程新手,我决定学习红宝石。我刚刚开始,所以我仍然试图了解ruby的许多概念和想法。好吧,我试图用我从第一课中学到的东西创建自己的程序,所以我写了这个小程序。

class Car
  def say_brand(aBrand)
    @thebrand=aBrand
  end

  def get_brand
    return @thebrand
  end

  def say_year(aYear)
    @theyear=aYear
  end

  def get_year
    return @theyear
  end

  def say_model(aModel)
    @themodel=aModel
  end

  def get_model
    return @themodel
  end
end

firstcar.say_brand(Toyota)
puts(firstcar.get_brand)
firstcar.say_year(1997)
puts(firstcar.get_year)
firstcar.say_model(Corolla)
puts(firstcar.get_model)

secondcar.say_brand(Subaru)
puts(secondcar.get_brand)
secondcar.say_year(2005)
puts(secondcar.get_year)
secondcar.say_model(Impressa)
puts(secondcar.get_model)

thirdcar.say_brand(Ford)
puts(thirdcar.get_brand)
thirdcar.say_year(2013)
puts(thirdcar.get_year)
thirdcar.say_model(Explorer)
puts(thirdcar.get_model)

当我在计算机的命令行上运行时,会出现:

cars.rb:45:syntax error,unexpected $end,expecting keyword_end

当我在Ruby的codecademy labs编辑器中运行它时,会出现:

(eval):569: (eval):569: compile error (SyntaxError)
(eval):569: syntax error, unexpected $end, expecting kEND

我期待该程序显示类似于此的内容:

-Toyota
-1997
-Corolla
-Subaru
-2005
-Impressa
-Ford
-2013
-Explorer

如果有人能告诉我我的代码有什么问题,我真的很感激,这样我就可以继续学习编程了。

2 个答案:

答案 0 :(得分:1)

错误消息表示程序结束时仍然打开了一个应该用end关闭的程序段。正确缩进代码应该使这些错误显而易见。

除此之外,发布的代码不会创建对象firstcarsecondcarthirdcar(例如,使用firstcar = Car.new)。品牌名称和汽车模型(例如,Toyota)看起来也像是打算将它们作为字符串 - 如果是这样,它们就会丢失引号(例如'Toyota')。 (如果您打算将它们作为类或对象,则发布的代码不会显示其定义。)

get_*say_*(你的意思是set?)访问者也不是很好的Ruby风格,虽然不是天生就错了。阅读Ruby中的访问器。

答案 1 :(得分:0)

使用irb。键入命令行irb,将打开一个交互式Ruby shell。在其中,逐个输入您的行。我发现你的班级定义没有错。如果逐个输入行并观察输出,您将看到哪一行有语法错误。