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

Ruby 从initialize分配实例变量的更简洁的方法?,ruby,Ruby,我有几个类用来在Ruby中包含数据(以及其中的一些方法)。例如: class Foo def initialize(bar, biz, baz) @bar=bar @biz=biz @baz=baz end end 是否有一种不太重复的方式将这些初始化参数传播到实例变量中?一行,但我发现这会掩盖一些事情: @bar,@biz,@baz = bar,biz,baz 一种快速方法是使用: class Foo

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

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

是否有一种不太重复的方式将这些初始化参数传播到实例变量中?

一行,但我发现这会掩盖一些事情:

@bar,@biz,@baz = bar,biz,baz
一种快速方法是使用:

class Foo

new将返回一个带有为您设置的初始值设定项和访问器的类(除此之外,它只是一个普通类)。如果您不需要任何自定义方法,也可以定义一个结构内联(例如,
Foo=struct.new(:bar,:biz,:baz)
)。

但是,使用更多或更少的参数调用Foo.new将无法产生错误,不是吗?它会产生错误,直到编辑。除此之外,额外的一行更需要键入和记住,而不仅仅是按照最初的方式分配变量。我真的希望有一些方法不重复名称2次以将其分配给实例变量您根本不重复名称。“Joe”和“Joen”不是同一个名字,那么为什么你认为
@bar
bar
是同一个名字呢?在我看来,重复并不能从参数列表中计算出来,也不能在方法体中实际使用这些参数。如果它只是一个哑类,可以考虑使用
Struct
,如果要添加方法,可以
class C
class Foo
  def initialize(*args)
    raise ArgumentError unless args.length == 3
    @bar, @biz, @baz = args
  end
end
class Foo < Struct.new(:bar, :biz, :baz)
  # custom methods go here
end