0

这是创建一个继承自 Ruby 中的另一个类的类的后续操作,并且m.one + m.two + m.three 不起作用。我们正在申请App Academy,这是一门针对经验很少或没有经验的人的学习编程课程。结果,这些问题是相似的,但我觉得其他两篇文章中的答案并没有给出答案,而是分歧地解释了切线概念(我确实利用了)

为了跟进前两个提到的链接,我遇到了继承类的问题。我有 Musician 类,它从 Person 类继承了三个变量。我的问题是,当我运行

m.first_name + " " + m.last_name + ": " + m.age.to_s

我收到一个错误:person.rb:31: undefined method `+' for nil:NilClass (NoMethodError)。我知道这个错误有答案,但我还不擅长理解这意味着什么。

有一点要提的是,上面的查询,一定是这样的。我不能把 Puts 放在它前面。

我将不胜感激任何关于为什么我得到这个关于 + 是一个未定义方法的声明的建议。

谢谢!

编辑:感谢您的快速回复。我没有意识到编码社区如此活跃!这真是太神奇了。我将编辑代码以反映最新的问题,所以我不会一直收到相同的建议。

4

2 回答 2

2

您的访问器正在返回 的结果puts,而不是实例变量的值。

首先,您已经在使用,它会attr_reader您生成这些方法。

其次,first_name例如,应该只返回@first_name

def first_name
  @first_name
end
于 2012-06-26T20:49:19.120 回答
2

我收到一个错误:person.rb:31: undefined method `+' for nil:NilClass (NoMethodError)。我知道这个错误有答案,但我还不擅长理解这意味着什么。

这意味着三个变量之一是nil,即它缺少值:

m.first_name
m.last_name

发生这种情况是因为您正在返回在所有访问器中调用该puts函数的结果。您需要返回变量本身,而不是打印它们并返回print 函数的结果。

此外,由于您已经在使用attr_reader您已经get为您创建的方法。这就是使用的全部意义attr_reader;它创建了一个为您返回底层实例变量的函数,您只需要初始化它。

例如,这个:

class Foo
  def bar
    @bar
  end
end

相当于

class Foo
  attr_reader :bar
end
于 2012-06-26T20:49:36.687 回答