Thank you both for your replies.

Just a minor detail regarding:

>    require 'generator'
>
>    module InitializesWith
>      def initializes_with(*params)
>        define_method :initialize do |*args|
>          iterator = SyncEnumerator.new(params, args)
>          iterator.each do |param, arg|
>            instance_variable_set "@#{param}", arg
>          end
>        end
>      end
>    end
>
>    class Class
>      include InitializesWith
>    end
>

This:

>    class C
>      attr_reader :x, :y, :z
>      initializes_with :x, :y, :z
>    end

evaluates to a Proc object, due to initializes_with implementation. I
guess it would be better to return nil at the end. Just a minor
aesthetic detail as I said.