From: Martin DeMello Date: 2005-02-16T06:39:53+09:00 Subject: Re: Ruby as a domain specific language? cnmaclean@hotmail.com wrote: > In our current (proprietary) language, it's something like this: > > Define File 1234 > Name = "My File" > Parent = 5678 > DataItem = "DataItem 1", Decimal, 10 bytes > DataItem = "DataItem 2", Hex, 10 bytes Ruby would let you come fairly close: #-----------------------------------------------------------------------# class DataFile def initialize(file_id, &block) @file_id = file_id $registry[file_id] = self @data = [] instance_eval(&block) end def name(name) @name = name end def parent(pid) @parent = pid end def data_item(*args) p args @data << args end end def define(klass, *args, &block) klass.new(*args, &block) end $registry = {} define(DataFile, 1234) { name "My File" parent 5678 data_item "DataItem 1", :Decimal, "10 bytes" data_item "DataItem 2", :Hex, "10 bytes" } p $registry #-----------------------------------------------------------------------# If you don't like the string quoting in "10 bytes" you can do class Fixnum def bytes self end end and then write 10.bytes martin