Rubyでは構造体風の振る舞いをするStructクラスがあるのは有名な話。タプル的なものを使わなければいけない際、Hashだと hoge[:name] = "hoge" のように書かなければいけないところを、 hoge.name = "hoge" と書けてタイプ数が減り、便利。
リファレンスマニュアルには以下のような形で、新しい構造体クラスを作る、とある。
1 | HogeTuple = Struct.new(:name, :value) |
でも、僕はこう書かないと落ち着かない……。
1 2 | class HogeTuple < Struct.new(:name, :value) end |
2行(あるいは「;」を含む記法)になってしまうし、何より無名のサブクラスが一つ余計に生成されてしまう(実際、 HogeTuple.ancestors で分かる)ので富豪的な感じがあるが、でも class って宣言が無いと非常にそわそわするんだけど、、、こう書くの僕だけ?
あと、HogeTupleにさらに独自のメソッドを付け加えたい際は、下の書き方のほうがコードがすっきりする、と言うメリットもある(と、最初は考えてた)。
でも
- Structs inside out(C-f “Custom Behavior”)
上記記事では、
1 2 3 4 5 | class HogeTuple < Struct.new(:name, :value) def inspect "<#{self.class} name: #{self.name.inspect} value: #{self.value.inspect}>" end end |
みたいなのはobsoleteであると主張していて、Struct.newにブロックを伴う書き方がいいようだ。
1 2 3 4 5 | HogeTuple = Struct.new(:name, :value) do def inspect "<#{self.class} name: #{self.name.inspect} value: #{self.value.inspect}>" end end |
何が言いたいかというと、「俺もそわそわする!」 と言う方は一緒に流行らせましょう。ということでこの行削除。ここまでは言えない。。
確かにancestorsに無名の謎クラスが入ってしまうのも気持ち悪い感じはある。でも、僕はclass って書いてないとそわそわする。もはや好みの問題?
あと
「StructをどうしてもStrutsと綴ってしまう」と言うコミュニティを作りましょう。Javaほとんど書けない僕ですらこうなのだから、みんなきっと間違えるだろうと思う(勘違い)。