def sort_em(arr, attr)
arr.sort_by { |e| e.instance_variable_get "@#{attr}" }
end
のは、それを試してみましょう。
class Pets
def initialize(x,y,z)
@dog = x
@cat = y
@pig = z
end
end
a = Pets.new(1, 3, 2)
#=> #<Pets:0x00000001be8560 @dog=1, @cat=3, @pig=2>
b = Pets.new(2, 1, 3)
#=> #<Pets:0x00000001bdec68 @dog=2, @cat=1, @pig=3>
c = Pets.new(3, 2, 1)
#=> #<Pets:0x00000001bd61a8 @dog=3, @cat=2, @pig=1>
arr = [a, b, c]
sort_em(arr, "dog")
#=> [#<Pets:0x00000001be8560 @dog=1, @cat=3, @pig=2>,
# #<Pets:0x00000001bdec68 @dog=2, @cat=1, @pig=3>,
# #<Pets:0x00000001bd61a8 @dog=3, @cat=2, @pig=1>]
sort_em(arr, "cat")
#=> [#<Pets:0x00000001bdec68 @dog=2, @cat=1, @pig=3>,
# #<Pets:0x00000001bd61a8 @dog=3, @cat=2, @pig=1>,
# #<Pets:0x00000001be8560 @dog=1, @cat=3, @pig=2>]
sort_em(arr, "pig")
#=> [#<Pets:0x00000001bd61a8 @dog=3, @cat=2, @pig=1>,
# #<Pets:0x00000001be8560 @dog=1, @cat=3, @pig=2>,
# #<Pets:0x00000001bdec68 @dog=2, @cat=1, @pig=3>]
変数名には 'snake_case'を使用してください。 – Stefan
"属性"とはどういう意味ですか?インスタンス変数 '@ foo'、メソッド' foo'、または 'attr_reader:foo'で定義したゲッターを意味しますか? – Max
'attr_reader'で定義したインスタンス変数で、' keyword'が文字列の場合は – OMGitzMidgar