您的位置:首页 > 大数据 > 人工智能

Rails 3 与 Rails 4 中 try 方法的不同

2016-06-01 11:16 561 查看
Rails 最新版本中,在使用 try 调用私有方法的时候,有了一些差异
class User
include Mongoid::Document

private
def say
puts "hello, world"
end
end


Rails 3:

u = User.new
u.try(:say)
==> hello, world


rails4:
u = User.new
u.try(:say)
==> nil


测试,Rails 3 中对象可以直接使用 try 调用私有方法,但是 Rails 4 中则不可以

我们来看看源代码


Rails 3.1 稳定版

def try(*a, &b)
if a.empty? && block_given?
yield self
else
__send__(*a, &b)
end
end


Rails 4.1 稳定版

def try(*a, &b)
if a.empty? && block_given?
yield self
else
public_send(*a, &b) if respond_to?(a.first)
end
end


主要差异在于 send 和 public_send, 如果你是个老手,肯定知道怎么回事了
send 是 Ruby 的内核方法,可以调用任意方法

public_send 则只能调用公有方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: