マニュアル読むと 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 なのね)