43088


メタプログラミングRubyを読んでいて、動的なメソッド定義を勉強したのですが、  
動的なメソッド定義をするメリットがいまいちよくわかりません。

仕組みについては理解できたのですが、これをやることでどのように救われるのでしょうか？

[code]

    class Book
        def initialize(name, author)
            @name = name
            @author = author
        end
    
        def self.define_component(name)
            define_method(name) do |text|
                puts @name + " is so nice book!"
                @author + text
            end
        end
    end
    
    # インスタンスの作成
    wilde = Book.new("the picture of dorian gray", "wilde")
    shake = Book.new("hamlet", "shakespeare")
    
    # メソッドの作成
    Book.define_component :the_picture_of_dorian_gray
    Book.define_component :hamlet
    
    # 作成したインスタンスで、新しく作ったインスタンスメソッドを利用
    puts wilde.the_picture_of_dorian_gray(" is nice!")
    # => the picture of dorian gray is so nice book!
    # => wilde is nice!
    
[/code]


CC BY-SA 3.0
2018-04-09T05:20:50.490
43086
2018-04-09T05:42:02.103
27892
question
ruby
Rubyでメタプログラミング define_methodについて


具体的にどの部分でしょうか？

[code]

    puts Book.instance_methods(false)
    
[/code]

上記のコードで現時点で定義されているメソッドを表示できます。また、

[code]

    Book.define_component :the_picture_of_dorian_gray
    Book.define_component :hamle
    
[/code]

の処理で、この時点で下記のメソッドと等価する内容が存在すると認識していただいても結構です

[code]

    def the_picture_of_dorian_gray(text)
        puts "the picture of dorian gray is so nice book!"
        puts "wilde" + text
    end
    def hamlet(text)
        puts "hamlet is so nice book!"
        puts "shake" + text
    end
    
[/code]


CC BY-SA 3.0
2018-04-09T05:42:02.103
43088
2018-04-09T05:42:02.103
27732
43086
answer