Ruby でデータ (およびそのデータに対するいくつかのメソッド) を格納するために使用しているいくつかのクラスがあります。例えば:
class Foo
def initialize(bar, biz, baz)
@bar=bar
@biz=biz
@baz=baz
end
end
これらの初期化引数をインスタンス変数に伝播するための反復の少ない方法はありますか?
Ruby でデータ (およびそのデータに対するいくつかのメソッド) を格納するために使用しているいくつかのクラスがあります。例えば:
class Foo
def initialize(bar, biz, baz)
@bar=bar
@biz=biz
@baz=baz
end
end
これらの初期化引数をインスタンス変数に伝播するための反復の少ない方法はありますか?
1つのライナーですが、これは物事をあいまいにする可能性があることがわかりました:
@bar,@biz,@baz = bar,biz,baz
class Foo
def initialize(*args)
raise ArgumentError unless args.length == 3
@bar, @biz, @baz = args
end
end
簡単な方法の 1 つは、 Structを使用することです。
class Foo < Struct.new(:bar, :biz, :baz)
# custom methods go here
end
Struct.new は、初期化子とアクセサーが設定されたクラスを返します (それ以外は、通常のクラスです)。カスタム メソッドが必要ない場合は、構造体をインラインで定義することもできます (例: Foo = Struct.new(:bar, :biz, :baz)
)。