在Ruby中遇到Person类的问题

时间:2012-06-15 03:58:18

标签: ruby class

我认为我在正确的轨道上,但是当我尝试呼叫p.first_name时。我得到一个错误,可以在截图中看到,有谁知道我做错了什么?

screenshot http://snag.gy/pj6ny.jpg 如果您看不到,请输入以下链接:http://snag.gy/pj6ny.jpg

以下是代码:

class Person 

    def initialize (first_name, last_name, age)  
        @first_name = first_name  
        @last_name = last_name
        @age = age  

    end  
end

当我进入

时,一切都很好
> p = Person.new("Earl", "Rubens-Watts", 2)

但之后很奇怪。期望的输出是:

 > p = Person.new("Earl", "Rubens-Watts", 2)
  > p.first_name
  => "Earl"
  > p.last_name
  => "Rubens-Watts"
  > p.age
  => 2

谢谢!

2 个答案:

答案 0 :(得分:6)

您尚未定义first_name方法或声明任何属性。试试这个:

class Person 
    attr_reader :first_name, :last_name, :age
    def initialize (first_name, last_name, age)  
        @first_name = first_name  
        @last_name = last_name
        @age = age
    end
end

答案 1 :(得分:1)

当您使用new调用构造函数时,该值将作为实例变量正确存储在p对象中。但是如果你没有编写相关的方法来读取它们,那么它们就无法在对象的范围内访问,而在OOP中通常使用getter方法。

这样做:

class Person

    attr_reader: :first_name, :last_name, :age

    def initialize (first_name, last_name, age)
        @first_name = first_name
        @last_name = last_name
        @age = age
    end

end

如果您还需要从外部修改其值,请改用attr_accessor,它会自动提供gettersetter方法。