Mitsukiの魔法実験室

Mitsuki's Magic Laboratory
Since 2002.09.14

Ruby の Struct#values_at に Symbol は使えない?

Posted at 2007/02/23 12:22 in Ruby

 マニュアル読むと Symbol が使えるサンプルがあるのだけど、実際やってみるとエラーになる in 1.8.4 and 5。


#!/usr/bin/env ruby
Foo = Struct.new(:foo, :bar, :baz)
obj = Foo.new('FOO', 'BAR', 'BAZ')
p :bar.to_i
p obj.values_at(0, :bar, 'baz')    # => ["FOO", "BAR", "BAZ"]

とやると


bash-3.2$ ./test.rb
10345
./test.rb:5:in `values_at': offset 10345 too large for struct(size:3) (IndexError) from ./test.rb:5
bash-3.2$

となってしまう。どうも :bar をハンドルに強制変換して範囲エラーになってる気がしてソースを読んでみると(struct.c)、数値と範囲と強制数値変換は実装されているけど、Symbol や 文字列から index を算出するようなコードが見当たらないので、未実装……なのかな??
(どうでもいいけど、Struct の中身って実装レベルだと Array なのね)