Ruby:定义实例变量的更短方式

标签 ruby ruby-2.1

我正在寻找在 initialize 方法中定义实例变量的更短方式:

class MyClass
  attr_accessor :foo, :bar, :baz, :qux
  # Typing same stuff all the time is boring
  def initialize(foo, bar, baz, qux)
    @foo, @bar, @baz, @qux = foo, bar, baz, qux
  end
end

Ruby 是否有任何内置功能可以避免这种猴子工作?

# e. g.
class MyClass
  attr_accessor :foo, :bar, :baz, :qux
  # Typing same stuff all the time is boring
  def initialize(foo, bar, baz, qux)
    # Leveraging built-in language feature
    # instance variables are defined automatically
  end
end

最佳答案

见面Struct ,专为此而生的工具!

MyClass = Struct.new(:foo, :bar, :baz, :qux) do
  # Define your other methods here. 
  # Initializer/accessors will be generated for you.
end

mc = MyClass.new(1)
mc.foo # => 1
mc.bar # => nil

我经常看到人们这样使用 Struct:

class MyStruct < Struct.new(:foo, :bar, :baz, :qux)
end

但这会导致多出一个未使用的类对象。为什么在不需要时制造垃圾?

关于Ruby:定义实例变量的更短方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35792797/

相关文章:

ruby-on-rails - Ruby 2.1.0/2.1.1/2.1.2 不支持调试器 gem

ruby - 为什么 `rvm install ruby-2.1.0` 会安装 preview1?

javascript - 从检索到的页面的 JavaScript 中解析数据

ruby-on-rails - Bundler 无法安装调试器 1.6.8

Rubymine 无法更改语言级别 |更新到 Ruby 2.1.1

ruby-on-rails - Rails 检查模型以查看所有字段是否为空

ruby-on-rails - Rails + OmniAuth Facebook : how to obtain Access Token?

ruby - 参数化数组#uniq(即uniq_by)

ruby-on-rails - 没有端口号的 Rails 应用程序

ruby - 为什么在 Grape API 中使用助手而不是包含模块?