| Class | SymTbl |
| In: |
lib/sym_tbl.rb
|
| Parent: | Object |
| father | [R] | |
| local | [R] | |
| sid | [R] |
# File lib/sym_tbl.rb, line 16 def initialize ( father_env=nil, default=nil ) @sid = (@@sid += 1) @local = Hash.new(default) if father_env.is_a? Hash @father = nil merge!(father_env) else @father = father_env end end
# File lib/sym_tbl.rb, line 31 def [] ( aKey ) return nil if aKey == '' aKey = key_convert(aKey) result = if @local.has_key? aKey @local[aKey] elsif @father.nil? @local.default else @father[aKey] end result = result[] if result.is_a? Trigger result end
# File lib/sym_tbl.rb, line 46 def []= ( aKey, aValue ) aKey = key_convert(aKey) @local[aKey] = aValue end
# File lib/sym_tbl.rb, line 62 def ancestors (@father.is_a?(SymTbl))? [self] + @father.ancestors : [self] end
# File lib/sym_tbl.rb, line 66 def desc_one if defined? @already_described return sid else @already_described = true return { sid => @local } end end
FIXME
# File lib/sym_tbl.rb, line 52 def each ( &block ) key_set = Set.new blk = lambda do |k,v| block[k, v] unless key_set.include? k key_set << k end @local.each(&blk) @father.each(&blk) unless @father.nil? end
# File lib/sym_tbl.rb, line 91 def has_key?(key) key = key_convert(key) if @local.has_key?(key) true else if @father.nil? false else @father.has_key?(key) end end end
# File lib/sym_tbl.rb, line 27 def key_convert ( aKey ) (aKey.is_a? Symbol)? aKey : aKey.to_s.to_sym end
# File lib/sym_tbl.rb, line 79 def merge(other) symtbl = self.class.new(self) symtbl.merge!(other) end