我确信我以前用过这个!
我有以下类(class)。标题字符串在类中创建,fname 和 lname 字符串作为参数传入。但是,我似乎无法让 @title 对象返回 nil 以外的任何内容。
我在这里做错了什么?
class Person
attr_accessor :fname, :lname, :title
def initialize(fname, lname)
@fname = fname
@lname = lname
@title = title
end
def string1
@lname + ", " + @fname
end
@title = "Director"
def string2
@title
end
end
p = Person.new("Yukihiro", "Matsumoto")
p p.string1
p p.string2
最佳答案
在您的类的上下文中,@title
指的是类实例变量。在实例方法的上下文中,@title
指的是实例变量。你混淆了这两者。
如果您需要应用某种默认值,那么您需要的是惰性初始化器:
def title
@title ||= "Director"
end
或者更好的是,首先填充它。解决此问题的一种方法是扩充您的初始化方法:
def initialize(fname, lname, title = nil)
@fname = fname
@lname = lname
@title = title || "Director"
end
关于ruby - 从 Ruby 类返回对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14219882/