From: Nat Pryce Date: 2001-11-02T04:41:16+09:00 Subject: [ruby-talk:24107] Re: C-like enum Very neat! I would suggest renaming enum2 to set (as the keyword is used in Pascal languages). E.g. set :READ, :WRITE, :EXECUTE Cheers, Nat. ----- Original Message ----- From: "Jason Voegele" Newsgroups: comp.lang.ruby To: "ruby-talk ML" ; Sent: Thursday, November 01, 2001 4:18 PM Subject: [ruby-talk:24095] C-like enum > For those of you who want a simple "enum" feature for Ruby (a-la C), try this: > > module Kernel > # simple (sequential) enumerated values > def enum(*symbols, &init_val) > i = 0 > if block_given? > i = init_val.call > end > symbols.each do |symbol| > module_eval("#{symbol} = i") > i += 1 > end > end > > # enumerated values suitable for bitwise OR-ing > def enum2(*symbols) > i = 1 > count = 0 > symbols.each do |symbol| > module_eval("#{symbol} = i") > count += 1 > i = 2**count > end > end > end > > class EnumTest > > enum(:ONE, :TWO, :THREE) {1} > > enum2 :READ, :WRITE, :EXECUTE > > def initialize > puts ONE > puts TWO > puts THREE > puts READ > puts WRITE > puts EXECUTE > end > end > > EnumTest.new > > Hope you find this useful. > > Jason Voegele >