我认为我在正确的轨道上,但是当我尝试呼叫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
谢谢!
答案 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
,它会自动提供getter
和setter
方法。