0

「動的メソッド」の概念を理解するのに苦労しています。このブログ投稿は役に立ちました。

「動的メソッド」は、実行時に計算されてから定義される名前または本体を持つメソッドです。

しかし、メソッドが動的に定義されていることをどのように確認できますか?

    class Foo
      def self.bar
        puts 'bar is statically defined'
      end

      define_method(:baz) do
        puts 'baz is dynamically defined'
      end
    end

    Foo.singleton_methods.include? :bar  #=> true
    Foo.instance_methods.include? :baz  #=> true 
    #??? shouldn't this be false according to the claim of 'dynamic methods'?
4

3 に答える 3

2
于 2013-09-09T06:56:14.220 に答える
-1
  1. def barの単なる構文糖衣ですdefine_method(:baz) do

  2. 実際、一度定義すると、「動的メソッド」と「通常のメソッド」の間に違いはありません。

  3. define_methodは通常 と一緒に使用されmethod_missingます。以下のコードは「動的メソッド」の良い例です。

    class Foo
      def method_missing(meth, *args, &block)
        eigenclass = class << self; self; end
        eigenclass.class_eval do
          define_method(meth) do
            puts "method '#{meth}' is dynamically defined"
          end
        end
        send(meth, *args, &block)
      end
    end
    
    foo = Foo.new
    puts foo.methods.include? :bar  # => false
    foo.bar                         # => method 'bar' is dynamically defined
    puts foo.methods.include? :bar  # => true
    
于 2013-09-08T18:32:17.743 に答える