您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页ruby 元编程中的动态创建方法define_method

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

来源:伴沃教育

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

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务