美文网首页
ruby 元编程中的动态创建方法define_method

ruby 元编程中的动态创建方法define_method

作者: 村南一枝花 | 来源:发表于2016-06-14 17:33 被阅读502次

    define_method

    动态定义方法,只需要提供一个方法名和充当方法主体的块。

    1. 一个简单的栗子
    class Myclass
        define_method :my_method do |my_arg|
          my_arg * 3
        end
    end
    ########
    obj = Myclass.new
    obj.my_method(2)      #=> 6
    

    Myclass类里边动态添加了一个my_method的实例方法,同时得出结果6。

    2.稍微复杂一点的栗子

    class Myclass
      def self.define_say(name)
        define_method name do
          "#{name} say: 'I`m #{name}!'"
        end
      end
    end
    ######
    Myclass.define_say('xiaoming')      #=> xiaoming
    

    这个栗子坐下来,貌似跟我想的有点不一样,我想要的结果是-->xiaoming say: 'I`m xiaoming!'

    然后打了一个断点,看了一下运行时的状态:

    
         7: def self.define_say(name)
     =>  8:   binding.pry
         9:   define_method name do
        10:     "#{name} say: 'I`m #{name}!'"
        11:   end
        12: end
    
    [1] pry(Myclass)> define_method name do
    [1] pry(Myclass)*   "#{name} say: 'I`m #{name}!'"
    [1] pry(Myclass)* end
    => :xiaoming
    

    发现在跑define_method name do ......这段代码之后,其实动态生成的是一个实例方法,随后我又在这段代码前后打断点加了查询方法的代码之后终于解决了疑惑。

    Paste_Image.png

    相关文章

      网友评论

          本文标题:ruby 元编程中的动态创建方法define_method

          本文链接:https://www.haomeiwen.com/subject/uoeudttx.html