読者です 読者をやめる 読者になる 読者になる

Ruby の OpenStruct クラスでアトリビュートっぽく

PythonJavaScript では

>>> class Country:
...     pass
... 
>>> japan = Country()
>>> japan.capital = "Tokyo"
>>> japan.capital
'Tokyo'

みたいな書き方ができるのだけれど(いわゆる「アトリビュート」)、Ruby ではこういう書き方はないのかなと思っていました。


けれども標準添付ライブラリの OpenStruct クラスで簡単にできるのですね。

irb(main):001:0> require 'ostruct'
=> true
irb(main):002:0> class Country < OpenStruct
irb(main):003:1> end
=> nil
irb(main):004:0> japan = Country.new
=> #<Country>
irb(main):005:0> japan.capital = "Tokyo"
=> "Tokyo"
irb(main):006:0> japan.capital
=> "Tokyo"

なるほど、これは便利。