mugyu
5/3/2014 - 1:24 AM

読み込み専用の構造体

読み込み専用の構造体

読み込み専用の構造体

Rubyの読み込み専用の構造体クラスです。 読み込み専用といっても、もちろんnew(...)で最初は値をセットするんですけど。

ただ、メンバーの量が少ないようなら自作クラスの方が意図が伝わりやすくてよさげ。

Structに値の更新を抑止する機能が有ればいいんだけど……

http://ruby.janlelis.de/65-value_struct-read-only-structs-in-ruby

# # # # # # # # #
# /65/immutable_struct.rb
#
# by               Jan Lelis
# e-mail:          mail@janlelis.de
# type/version:    ruby 
# snippet url:     http://ruby.janlelis.de/65/immutable_struct.rb
# original post:   http://ruby.janlelis.de/65-value_struct-read-only-structs-in-ruby
# license:         CC-BY (DE)
#
# (c) 2012 Jan Lelis.

class ValueStruct < Struct
  VERSION = '0.2.0'
  
  undef []=
  
  def initialize(*args, &block)    
    super(*args, &block)
    members.each{ |member| instance_eval{ undef :"#{member}=" } }
  end
  
  def inspect
    super.to_s.sub('struct', 'ValueStruct')
  end
end