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

转载 2016年06月01日 11:16:11

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 则只能调用公有方法


相关文章推荐

Rails4 与 3的一些区别

Match routes:   Rails 3:     match '/item/:id/purchase', to: 'items#purchase'   Rails 4(Ruby>=1.9...

rails3beta4 + devise + cancan 打造权限管理系统

rails3beta4 + devise + cancan 打造权限管理系统   为后面的项目做准备, 先拿来练练手。 rails的环境搭建不再重复,先新建项目   rails ne...

The Rails 4 Way, 3rd edition.pdf

  • 2016-08-11 09:46
  • 4.71MB
  • 下载

THE RAILS 4 WAY, 3RD EDITION

  • 2015-07-31 09:06
  • 3.66MB
  • 下载

rails 手动创建controller和model 用和model名不同的数据表 会产生的问题

rails的一些学习笔记rails的controller和model不一定要使用rails命令来写,只要文件的位置放的没错自己手动建立就可以。 手动创建model面临的问题就是数据库表不能建立,但这也...

rails4常用gem3

  • 2014-04-23 08:30
  • 17.44MB
  • 下载

Rails中两种不同的表单处理方式

Rails中两种不同的表单处理方式 2009-05-14 12:34 1.表单类型一 请输入用户信息 Name: 30 %> Passwor...

rails for openfire: xmpp4r使用实践

xmpp4r实现了xmpp协议,使rails与openfire通信成为可能。废话不多少,看代码吧。 安装xmpp4r gem install xmpp4r code # -*- enc...

升级到 Rails 4,你的应用需要准备什么?

一个新的 Rails 版本即将发布了,随之带来了很多的修改、依赖和新特性。 让我们看一下,要使用 Rails 4,你需要为你的应用准备些什么。 Tom-Lin 翻译于...

Allow Users to Authenticate With Username Only Using Devise, ActiveAdmin, Rails 4 and Ruby 2

转自:http://alexvpopov.github.io/blog/2013/10/31/allow-users-to-authenticate-with-username-only-using-...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)