Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby:定义实例变量的较短方法_Ruby_Ruby 2.1 - Fatal编程技术网

Ruby:定义实例变量的较短方法

Ruby:定义实例变量的较短方法,ruby,ruby-2.1,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是否有任何内置特性可以避免这种重复工作

我正在寻找在
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
Meet,一个专为这个设计的工具

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
classmystruct

但这会导致一个额外的未使用的类对象。为什么要在不需要的时候创建垃圾?

用这种方式定义类有什么好处?我指的是你在回答中使用的方式。在我的回答中有两种方式。第一种是在你的回答中。@Stefan:这是一种常见的错误用法,所以我想警告你不要这样做:)