Ruby 2.1下的define_method的方法不再是public
Hello!
如果觉得不错的话,并且不吝转载时,请顺便添加上这篇文章的链接
https://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
endA.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
