[ruby-list:47264] Re: Structに型宣言/型変換を組み込みたい

From: "U.Nakamura" <usa@...>
Date: 2010-07-29 03:26:58 UTC
List: ruby-list #47264
こんにちは、なかむら(う)です。

In message "[ruby-list:47263] Structに型宣言/型変換を組み込みたい"
    on Jul.29,2010 11:40:12, <missy@be.to> wrote:
> (1)こうすればできる/既にできる

class <<Struct
  alias original_new new

  def new(*members, &block)
    struct = original_new(*members)
    struct.instance_eval do
      class <<self
        alias original_new new

        def new(*vals)
          members.each_with_index do |member, i|
            method = class_variable_get("@@#{member}")
            if method
              vals[i] = vals[i].__send__(method)
            end
          end
          original_new(*vals)
        end
      end

      def force_member(member, method)
        class_variable_set("@@#{member}", method)
      end
    end

    block.call(struct) if block

    struct
  end
end

Fields = Struct.new :number, :mojiretsu do |s|
  s.force_member :number, :to_i
  s.force_member :mojiretsu, :to_s
end
p Fields.new 12345, "23456"
p Fields.new "12345", 23456


それでは。
-- 
U.Nakamura <usa@garbagecollect.jp>


In This Thread