From: parisnight@... Date: 2006-03-28T05:03:58+09:00 Subject: Re: tagged unions and instantiating objects Oh, I see, so module almost serves purpose of an abstract class. Can instance variables be assigned in self.new which are then carried into TypeB without explicitly passing them? I think that may be done in Lisp with-slots of the abstract class. mmap is convenient and acts as a global variable to permit access to previously read numbers while deep in the parser. Wouldn't it look nicer to simply fill the slots in the abstract class with the numbers in the header while you have them, more like module Type def self.new buf @version = parse_byte buf # save some header info, alas, invisible to TypeA byte = parse_byte buf case byte when 0 TypeA.new buf when 1 TypeB.new buf end end end And have TypeA or TypeB inherit those slots that are already filled. Alas, the final instance can't see @version. Sure you can pass the data into the instantiation or use mmap, but it seems cleaner if you could simply bind it in the abstract header class where it naturally belongs. Kind regards, Bob Anderson PS. I admire your Ruby work and writings!