`
fantaxy025025
  • 浏览: 1329218 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

ruby_rails之alias深入理解_和alias_method

 
阅读更多

 

今天看rails的源码里有alias_method的方法,但我好像只知道alias。

ctrl+b进入alias_method的源码,居然是stub方法。

 

  def alias_method(new_name, old_name)
    #This is a stub, used for indexing
  end
  

看一下文档,总结:

相同点:

    都是给方法起别名

 

区别   :

    alias是ruby的关键字(看看下面代码的颜色哈~)

    alias_method是stub方法,可以被覆盖

 

    alias_method :breakpoint_server=, :breakpoint_server
    alias breakpoint_server breakpoint_server

这里也有个总结,还不错:

 

  • 1. alias是Ruby的一个关键字,而alias_method是Module类的一个方法
  • 2. alias的参数就是方法本身(method identify),注意,不是字符串,也不是Symbol,alias_method的参数则是字符串或者symbol,并且使用逗号分隔。
  • 3. alias_method可以重定义,而alias则不能        不过貌似在1.9中,alias支持symbol参数了。

alias 和 self 深入理解

 

#1 给实例方法起别名

class AliasMethodPractice

  def ist_m_a
    puts "in #{__method__}"
  end

  def self.cls_m_x
    puts "in #{__method__}"
  end

  alias ist_m_b ist_m_a #<=============here

end

obj = AliasMethodPractice.new
obj.ist_m_a
obj.ist_m_b

输出也有点意思:你看出来了么?

 

in ist_m_a

in ist_m_a

 

#2 给类方法起别名

class AliasMethodPractice

  def ist_m_a
    puts "in #{__method__}"
  end

  def self.cls_m_x
    puts "in #{__method__}"
  end
  alias ist_m_b ist_m_a
  puts "self=#{self}"
  puts "self.class=#{self.class}"

  alias cls_m_y cls_m_x # undefined method `cls_m_x' for class `AliasMethodPractice' (NameError)
  alias AliasMethodPractice.cls_m_y AliasMethodPractice.cls_m_x # syntax error, unexpected '.' (SyntaxError)
  alias cls_m_y AliasMethodPractice.cls_m_x # syntax error, unexpected '.', expecting kEND (SyntaxError)
   #<=============here 是错误的
end

obj = AliasMethodPractice.new
obj.ist_m_a
obj.ist_m_b

AliasMethodPractice.cls_m_x

  这种写法是会报错的!原因,成了方法调用。

 

  看看下面的self输出的区别吧:

class AliasMethodPractice

  def ist_m_a
    puts "in #{__method__}"
  end

  def self.cls_m_x
    puts "in #{__method__}"
  end

  alias ist_m_b ist_m_a

  puts "self=#{self}"
  puts "self.class=#{self.class}"
  class << self
    puts "self=#{self}"
    puts "self.class=#{self.class}"
  end
   #<=============here
end

obj = AliasMethodPractice.new
obj.ist_m_a
obj.ist_m_b

AliasMethodPractice.cls_m_x
#AliasMethodPractice.cls_m_y

 输出:

 

self=AliasMethodPractice

self.class=Class

self=#<Class:AliasMethodPractice>

self.class=Class

in ist_m_a

in ist_m_a

in cls_m_x

 

看见了区别,就比较好说了。

下面的写法才可以实现给类方法取别名:

class AliasMethodPractice

  def ist_m_a
    puts "in #{__method__}"
  end

  def self.cls_m_x
    puts "in #{__method__}"
  end

  alias ist_m_b ist_m_a

  puts "self=#{self}"
  puts "self.class=#{self.class}"
  class << self
    puts "self=#{self}"
    puts "self.class=#{self.class}"
    alias cls_m_y cls_m_x #It is that!  #<=============here
  end

end

obj = AliasMethodPractice.new
obj.ist_m_a
obj.ist_m_b

AliasMethodPractice.cls_m_x
AliasMethodPractice.cls_m_y

输出:

self=AliasMethodPractice

self.class=Class

self=#<Class:AliasMethodPractice>

self.class=Class

in ist_m_a

in ist_m_a

in cls_m_x

in cls_m_x

 

 

本文结束。

本文结束。

本文结束。

本文结束。

本文结束。

本文结束。


分享到:
评论
2 楼 fantaxy025025 2011-10-14  
呵呵。楼上说的是对的!
如果都打开class的话,是没有问题的。
就怕用self.method_a这种,alias又没有在class类里面写。
1 楼 orcl_zhang 2011-10-14  
引用
undefined method `cls_m_x' for class `AliasMethodPractice'

 class A
   class << self
     def mm
      puts 'mm'
     end
     alias :mmm :mm
   end
 end
# nil
 A.mmm
#mm
# nil
 class A
   def self.s_m
     'mm'
   end
   alias :s_mm :s_m
 end
NameError: undefined method `s_m' for class `A'
	from (irb):46
 


alias重命名“当前”的方法。

相关推荐

    Ruby on Rails Guides v2 - Ruby on Rails 4.2.5

    - **重要概念**:本指南旨在帮助读者深入理解Ruby on Rails(以下简称Rails)4.2.5版本的核心功能与最佳实践。 - **基础假设**:读者已经具备一定的Ruby编程基础,并对Web开发有一定的了解。 #### 二、什么是Rails...

    Redmine 搭建 Ruby_Ruby_on_Rails 项目管理系统

    **Redmine** 是一个基于 Web 的项目管理和跟踪工具,它使用 Ruby on Rails(简称 ROR)框架构建而成。Redmine 的设计初衷是为了提供一个灵活且易于定制的解决方案来满足不同组织对项目管理的需求。它支持多种数据库...

    weixin_rails_middleware, 微信集成 ruby weixin_rails_middleware for integration weixin..zip

    `weixin_rails_middleware` 是一个开源的 Ruby 框架中间件,设计用于帮助开发者轻松地在 Rails 应用程序中集成微信服务。...通过深入理解其工作原理和使用方法,开发者可以高效地构建出具有微信功能的 Rails 应用。

    Ruby_on_Rails_Web_开发之旅[清晰文字pdf].part1

    分2卷压缩,另一卷在我的资源列表 本书从Ruby和Rails的历史讲起,以在Rails...本书注重实用性,适合初学者迅速掌握Ruby开发工具的使用方法,为希望深入了解Rails框架并建立健壮网络应用的开发人员提供强大的技术支持。

    Ruby_On_Rails笔记

    Ruby on Rails是一个使用Ruby语言编写的开源Web应用框架,它使用了“约定优于配置”(convention over configuration)的开发哲学,旨在减少代码量和提高开发效率。Rails框架的核心是遵循MVC(模型-视图-控制器)...

    ruby_on_rails 源代码上

    在学习Ruby on Rails之前,首先需要理解Ruby的基本概念,如变量、数据类型、控制结构(如if语句、循环)、类与对象、方法定义、模块和块等。 2. **Rails框架** Rails框架提供了一套完整的工具集,用于快速构建Web...

    ruby_on_rails安装部署指导手册

    例如,在此手册中提到了 Ruby 2.3.0 和 Rails 的搭配使用。 #### 三、软件包上传 - 使用 `mkdir /opt/ruby_on_rails` 命令创建安装目录。 - 通过上传工具将软件包上传至 `/opt/ruby_on_rails` 目录下。 - 可以使用 ...

    Ruby_on_Rails笔记

    通过阅读《Ruby on Rails笔记》,我们可以了解到作者对于Ruby on Rails学习过程中的深入理解和实践经验。这份笔记不仅是一份学习指南,也是对Rails初学者来说非常有价值的参考资料。无论是想要从零开始学习Rails,...

    ruby_on_rails_创建一个博客项目.doc

    ruby_on_rails_创建一个博客项目.doc

    web开发_ruby_on_rails

    ### Web开发:深入理解Ruby on Rails #### 一、引言与概述 Ruby on Rails (简称Rails) 是一种用于Web开发的开源框架,基于Ruby语言。Rails的设计理念强调程序员的生产力和代码的简洁性,因此它成为了Ruby语言的...

    ruby_on_rails&radrails环境配置.pdf

    ### Ruby on Rails与RadRails环境配置详解 ...至此,您已经完成了Ruby on Rails和RadRails环境的基本配置,可以开始进行Rails项目的开发工作了。通过以上步骤,您可以更高效地进行Web应用的开发和测试。

    Ruby_for_Rails.pdf

    通过上述四个部分的学习,读者不仅能掌握Ruby语言的基础知识,还能深入了解Rails框架的核心概念和技术细节。更重要的是,本书提供了丰富的实战案例,帮助开发者将理论知识应用到实际项目中,从而更好地应对复杂多变...

    Ruby_on_Rails_Web_开发之旅[清晰文字pdf].part2

    【分2卷压缩,另一卷在我的资源列表】 本书从Ruby和Rails的历史讲起,以在...本书注重实用性,适合初学者迅速掌握Ruby开发工具的使用方法,为希望深入了解Rails框架并建立健壮网络应用的开发人员提供强大的技术支持。

    Ruby_on_Rails实践.rar

    Ruby on Rails,简称Rails,是基于Ruby编程语言的一个开源Web应用程序框架,它遵循MVC(模型-视图-控制器)架构模式,旨在提高开发效率和代码的可读性。Rails的核心理念是“约定优于配置”(Convention Over ...

    Ruby_on_Rails快速Web应用开发实战

    Ruby on Rails(简称RoR)是一种基于Ruby编程...学习者将深入理解MVC架构,掌握路由配置、数据库设计、视图渲染、测试驱动开发以及如何利用社区资源优化项目。通过实践,你可以快速上手并体验到RoR带来的高效开发体验。

    Ruby-on-Rails-rails.zip

    Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zip Ruby_on_Rails_rails.zipRuby_on_...

    Ruby on Rails_ Up and Running

    RUBY的经典之作,对其在RAILS下开发写得很详细

Global site tag (gtag.js) - Google Analytics