Sha256: 50ece808422c32adf9ac55c4c531b6ea3fe2494cd84e00a03045aea6eeacd035
Contents?: true
Size: 1.85 KB
Versions: 4
Compression:
Stored size: 1.85 KB
Contents
# Author: Nicolas Pouillard <ertai@lrde.epita.fr>. # Copyright: Copyright (c) 2004 Nicolas Pouillard. All rights reserved. # License: Ruby license. # $LastChangedBy: ertai $ # $Id: symtbl.rb 189 2005-04-03 00:33:40Z ertai $ require 'set' class SymTbl @@sid = -1 attr_reader :sid, :local, :father def initialize ( father_env=nil, default=nil ) @father = father_env @sid = (@@sid += 1) @local = Hash.new(default) end def [] ( aKey ) if @local.has_key? aKey @local[aKey] elsif @father.nil? @local.default else @father[aKey] end end def []= ( aKey, aValue ) @local[aKey] = aValue end # FIXME 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 def ancestors (@father.is_a?(SymTbl))? [self] + @father.ancestors : [self] end def desc_one if defined? @already_described return sid else @already_described = true return { sid => @local } end end def desc ancestors.map{ |s| s.desc_one }.to_yaml end end # class SymTbl if defined? TEST_MODE or __FILE__ == $0 require 'test/unit' class SymTblTest < Test::Unit::TestCase def test1 root = SymTbl.new root[:a] = 0 root[:b] = 1 assert_equal(1, root[:b], 't1') assert_equal(0, root[:a], 't2') sub1 = SymTbl.new(root) sub1[:a] = 2 sub1[:c] = 3 assert_equal(1, sub1[:b], 't3') assert_equal(2, sub1[:a], 't4') assert_equal(3, sub1[:c], 't5') assert_equal(0, root[:a], 't6') sub2 = SymTbl.new(sub1) assert_equal(2, sub2[:a], 't7') sub2[:a] = 42 assert_equal(42, sub2[:a], 't8') assert_equal([], sub2.desc) end end # class SymTblTest end
Version data entries
4 entries across 4 versions & 2 rubygems
Version | Path |
---|---|
ttk-0.1.576 | ruby_ex/symtbl.rb |
ttk-0.1.579 | ruby_ex/symtbl.rb |
ttk-0.1.580 | ruby_ex/symtbl.rb |
vcs-0.2.148 | ruby_ex/symtbl.rb |