Ruby 2.1下的define_method的方法不再是public
Hello!
如果觉得不错的话,并且不吝转载时,请顺便添加上这篇文章的链接
http://www.hi-ruby.com/posts/1045
最近项目打算从1.9.3升级到2.1.1, 目前线上同时跑着1.9.3和2.1.1,但是发现define_method
在2.1.1下面生成的方法不再是public,而是根据上下文来判断.
比如以下代码:
class A private define_method :foo do puts 'foo from A' end end class B # private 注释掉private define_method :foo do puts 'foo from B' end end
A.new.foo 1.9.3 #=> foo from A 2.0.0 #=> foo from A 2.1.1 #=> NoMethodError: private method `foo' called for #<A:0x007fe2ca13a9c0> B.new.foo 1.9.3 #=> foo from B 2.0.0 #=> foo from B 2.1.1 #=> foo from B