ruby - 设置未初始化的实例变量

标签 ruby class coding-style instance-variables

在未初始化的类中使用实例变量并使用其他方法设置它们是否优雅?或者也许有更好的方法来做到这一点?

class Klass
  def initialize(a)
    @a = a
  end

  def set_b(b)
    @b = b
  end
end

最佳答案

与其他语言相比,如果您不初始化实例变量,它将始终为 nil(而在某些其他语言中,您可能会得到未定义的东西)。

只要 Klass 的其他方法不依赖于实际有值的实例变量,这应该没问题。

至于getter和setter,有attr_accessorattr_readerattr_writer(参见the docs)。

class Klass
  attr_accessor :b
  # there's also attr_reader and attr_writer

  def initialize(a)
    @a = a
  end
end

k = Klass.new :foo
k.b = :bar

k.b
#=> :bar

k.a
#=> undefined method `a' for #<Klass:0x007f842a17c0e0 @a=:foo, @b=:bar> (NoMethodError)

关于ruby - 设置未初始化的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28072804/

相关文章:

python - Enumerate() 函数或类?

java - 错误 : Could not find or load main class simon. 游戏

javascript - 指定 for 循环的终点有哪些优点和缺点?

c++ - 使用预处理器对 C/C++ 进行元编程

Java 约定 : when referring to coordinates, 我是否用 "location"或 "position"命名方法和变量?

ruby - 测试不会自动运行

ruby-on-rails - Rails - 电子邮件链接验证和电话号码验证以及 URL 验证

ruby-on-rails - CSV - 未加引号的字段不允许\r 或\n(第 2 行)

ruby - 练习 50::http://ruby.learncodethehardway.org/book/ex50.html(使用 sinatra 运行 hello world 时出错”

python - 使用元组作为输入初始化一个类