这是Creating a class which inherits from another class in Ruby和m.one + m.two + m.three doesn't work的后续跟进。我们正在申请App Academy这是一项学习代码课程,适用于经验不足或没有经验的人士。结果,这些问题是相似的,但我觉得其他两篇文章中的答案没有解决答案,而是分解为切向概念(我确实利用了)
要跟进前两个提到的链接,我遇到了继承类的问题。我有一个Musician类,它继承了Person类中的三个变量。我的问题是当我运行
时m.first_name + " " + m.last_name + ": " + m.age.to_s
我收到错误:person.rb:31:nil的未定义方法`+':NilClass(NoMethodError)。我知道这个错误有答案,但我还不擅长理解这意味着什么。
要提一点的是,上面的查询必须是它的方式。我不能把Puts放在它面前。
我很感激为什么我得到关于+是一种未定义方法的陈述的任何建议。
谢谢!
编辑:感谢您的快速回复。我没有意识到编码社区是如此活跃!这真是太神奇了。我将编辑代码以反映最新的问题,所以我不会继续得到相同的建议。
答案 0 :(得分:2)
您的访问者返回puts
的结果,而不是实例变量的值。
首先,您已经在使用attr_reader
,为生成
其次,first_name
例如应该返回@first_name
:
def first_name
@first_name
end
答案 1 :(得分:2)
我收到错误:person.rb:31:nil的未定义方法`+':NilClass(NoMethodError)。我知道这个错误有答案,但我还不擅长理解这意味着什么。
这意味着三个变量之一是nil
,即它没有值:
m.first_name
m.last_name
这是因为您要返回在所有访问者中调用puts
函数的结果。您需要返回变量本身,而不是打印它们并返回打印函数的结果 。
此外,由于您已经在使用attr_reader
,因此您已经为您创建了get
个方法。这是使用attr_reader
的重点;它创建了一个为您返回基础实例变量的函数,您只需要初始化它。
例如,这个:
class Foo
def bar
@bar
end
end
相当于
class Foo
attr_reader :bar
end