ruby - 从 Ruby 类返回对象

标签 ruby class

我确信我以前用过这个!

我有以下类(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/

相关文章:

python - Python 类遇到问题

C++ 类没有返回我的私有(private)变量的正确值

javascript - 类和数组真的只是 JavaScript 中的对象吗?

c++ - 如何处理成员函数中的递归?

ruby-on-rails - rvm 和 Capistrano 无法一起工作 : rvm_bin_path setting not taking effect

ruby-on-rails - 铁路 TimeWithZone 与日期

ruby-on-rails - 如果下一个不存在,Ruby 数组重复值,

ruby-on-rails - 在 IRB 中重新加载 ruby​​gem

ruby - 将参数传递给 ruby​​ 线程

c# - 从文本名称实例化一个类