我是红宝石并且练习OOP的新手。当我尝试创建一个JellyBean类的实例(' j'在我的代码中)时,我收到的错误如下所示。
我想将j的name属性设置为" vanilla jelly bean" - > (即@flavour +'果冻豆')
任何人都可以告诉我的错误吗?
class Dessert
attr_accessor :name
attr_accessor :calories
def initialize(name, calories)
@name = name
@calories = calories
end
def healthy?
@calories < 200
end
def delicious?
true
end
end
class JellyBean < Dessert
attr_accessor :flavour
def initialize(flavor)
@calories = 5
@flavour = flavour
@name = @flavour + ' jelly bean'
end
def delicious?
@flavour != 'licorice'
end
end
j = JellyBean.new('vanilla')
我收到以下错误
(eval):304: undefined method `+' for nil:NilClass (NoMethodError)
from (eval):311:in `new'
from (eval):311
答案 0 :(得分:3)
因为你的初始化方法中有一个拼写错误:
def initialize(flavor)
@calories = 5
@flavour = flavour
@name = @flavour + ' jelly bean'
end
flavour
被声明为属性但从未设置,所以总是为零。这意味着@flavour
将始终设置为nil。
应该是:
def initialize(flavour)
@calories = 5
@flavour = flavour
@name = @flavour + ' jelly bean'
end
答案 1 :(得分:0)
如果我运行你的代码并在底部进行检查,那就可以了:
#<JellyBean:0x00000001920f58 @calories=5, @flavour="vanilla", @name="vanilla jelly bean">
这是我添加的行:
puts j.inspect·