Sha256: 0fd56e249ab5afd9b42a3f6894b9117f0176d8623ac72347a158f4bff2a5b2dd
Contents?: true
Size: 1.26 KB
Versions: 3
Compression:
Stored size: 1.26 KB
Contents
class Module # Automatically create an initializer assigning the given # arguments. # # class MyClass # initializer(:a, "b", :c) # end # # _is equivalent to_ # # class MyClass # def initialize(a, b, c) # @a,@b,@c = a,b,c # end # end # # Downside: Initializers defined like this can't take blocks. # This can be fixed when Ruby 1.9 is out. # # The initializer will not raise an Exception when the user # does not supply a value for each instance variable. In that # case it will just set the instance variable to nil. You can # assign default values or raise an Exception in the block. # def initializer(*attributes, &block) define_method(:initialize) do |*args| attributes.zip(args) do |sym, value| instance_variable_set(:"@#{sym}", value) end instance_eval(&block) if block end end end # _____ _ # |_ _|__ ___| |_ # | |/ _ \/ __| __| # | | __/\__ \ |_ # |_|\___||___/\__| # =begin test require 'test/unit' class TCModule < Test::Unit::TestCase def test_attr_initializer cc = Class.new cc.class_eval { initializer :ai attr_reader :ai } c = cc.new(10) assert_equal( 10, c.ai ) end end =end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
facets-0.9.0 | lib/nano/module/initializer.rb |
facets-1.0.0 | lib/facet/module/initializer.rb |
facets-1.0.3 | packages/core/lib/facet/module/initializer.rb |