从initialize分配实例变量的更简洁方法?

时间:2013-11-11 04:16:37

标签: ruby

我有几个类用于在Ruby中包含数据(以及一些方法)。例如:

class Foo
  def initialize(bar, biz, baz)
    @bar=bar
    @biz=biz
    @baz=baz
  end
end

将这些初始化参数传播到实例变量中的重复方法是否较少?

3 个答案:

答案 0 :(得分:2)

一个班轮,但我发现这可能会掩盖一些事情:

@bar,@biz,@baz = bar,biz,baz

答案 1 :(得分:1)

class Foo
  def initialize(*args)
    raise ArgumentError unless args.length == 3
    @bar, @biz, @baz = args
  end
end

答案 2 :(得分:0)

一种快捷方法是使用Struct

class Foo < Struct.new(:bar, :biz, :baz)
  # custom methods go here
end

Struct.new将返回一个类,其中为您设置了初始化程序和访问程序(除此之外,它只是一个普通的类)。如果您不需要任何自定义方法,您还可以定义内联结构(例如Foo = Struct.new(:bar, :biz, :baz))。