Ruby创建“关键字”同名方法别名的方法_ruby专题

begin和end是ruby的关键字,但是Range中也有名称为begin和end的实例方法。现在问题来了:怎么创建它们的别名方法?

如果用class Range;alias begin_x begin end是不行的,ruby以为后面一个begin是某个语法块的开头啊:

复制代码 代码如下:

2.1.2 :089 > class Range;alias begin0 begin end
2.1.2 :090?>  

用class Range;alias begin_x "begin" end也不行,用alias begin_x :begin还是不行!

复制代码 代码如下:

2.1.2 :083 > class Range
2.1.2 :084?>   alias begin0 :begin
2.1.2 :085 >       end
2.1.2 :086?>   end
SyntaxError: (irb):86: syntax error, unexpected keyword_end, expecting end-of-input
from /Users/apple/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'
2.1.2 :087 > class Range;alias begin0 "begin" end
SyntaxError: (irb):87: syntax error, unexpected tSTRING_BEG
class Range;alias begin0 "begin" end
                          ^
from /Users/apple/.rvm/rubies/ruby-2.1.2/bin/irb:11:in `<main>'

没法子了吗?我突然想到了这个语法:alias begin_x :"begin",这回哦鸟!同样的end方法类似。

时间: 2024-09-20 06:20:53

Ruby创建“关键字”同名方法别名的方法_ruby专题的相关文章

Ruby基础知识之方法、代码段_ruby专题

Ruby中的方法是一个有名称的代码块,是与一个或多个对象关联的参数化的代码.调用时须给出方法名,接收者(所在对象),参数值,且最后一个表达式的值做为返回值.与Ruby方法相似的是代码块,它没有名字,且调用时只通过迭代器或被间接调用.  (一)方法 (1)定义方法 定义方法就是 复制代码 代码如下: def 方法名(参数列表) 方法体 end 最后一个表达式做为返回值返回,如果有值,则返回:无值则返回nil.可以省略return. 在类中定义的方法为实例方法,实例方法可以在类的实例对象上使用.如果

Ruby面向对象编程中类与方法的基础学习_ruby专题

打开类和猴子补丁 在Ruby中,类定义的方法和其他的语句没有任何区别,都是一行一行的执行下去的.如下例子: class Example def method_1 puts "method 1" end end class Example def method_2 puts "method 2" end end 本例中,当第一次定义Class Example的时候,还没有一个叫做Example的Class存在,因此,Ruby开始定义这个类,当后面在定义这个类时,Rub

详解Ruby中的单件方法和单件类_ruby专题

单件方法 Ruby允许给单个对象增加方法,这种只针对单个对象生效的方法,称为单件方法 示例代码 str = "just a regular string" def str.title? self.upcase == self end str.title? # => false str.methods.grep(/title?/) # => [:title?] str.singleton_methods #=> [:title?] str.class # => S

浅析Ruby中继承和消息的相关知识_ruby专题

继承允许你创建一个类,作为另一个类的精炼(refinement)和特化(specialization).例如,在我们的自动点唱机系统中,有"歌曲"这一概念,被封装在Song类中,然后,随着市场的成长,我们需要提供卡拉OK的支持.一首卡拉OK歌曲和其他歌曲没什么两样(它只是没有主唱的音轨,对此我们不必关心).不过,它还包括对于的一套歌词以及时间信息.当我们的自动点唱机在播放一首卡拉OK歌曲时,歌词应该随音乐滚动显示在点唱机前的屏幕上. 解决这个问题的一种方法是定义一个新的类Karaoke

Ruby中Block和迭代器的使用讲解_ruby专题

我们来简单地描述Ruby的一个独特特性.Block,一种可以和方法调用相关联的代码块,几乎就像参数一样.这是一个不可思议的功能强大的特性. 可以用Block实现回调(但它比Java的匿名内部(anonymous inner)类更简单),传递一组代码(但它远比c的函数指针灵活),以及实现迭代器. Block只是在花括号或者do...end之间的一组代码. {puts "Hello"} #this is a block do ### club.enroll(person) #and so

实例讲解Ruby中的钩子方法及对方法调用添加钩子_ruby专题

钩子方法有些类似事件驱动装置,可以在特定的事件发生后执行特定的回调函数,这个回调函数就是钩子方法(更形象的描述: 钩子方法可以像钩子一样,勾住一个特定的事件.),在Rails中before\after函数就是最常见的钩子方法. Class#inherited方法也是这样一个钩子方法,当一个类被继承时,Ruby会调用该方法.默认情况下,Class#inherited什么都不做,但是通过继承,我们可以拦截该事件,对感兴趣的继承事件作出回应. class String def self.inherit

在Ruby中创建和使用哈希的教程_ruby专题

哈希(Hash)是类似 "employee" => "salary" 这样的键值对的集合.哈希的索引是通过任何对象类型的任意键来完成的,而不是一个整数索引,其他与数组相似. 通过键或值遍历哈希的顺序看起来是随意的,且通常不是按照插入顺序.如果您尝试通过一个不存在的键访问哈希,则方法会返回 nil. 创建哈希 与数组一样,有各种不同的方式来创建哈希.您可以通过 new 类方法创建一个空的哈希: months = Hash.new 您也可以使用 new 创建带有默

优化Ruby代码使程序运行速度提高的例子_ruby专题

这篇文章主要介绍了我是如何把ruby gem contracts.ruby速度提升10倍的. contracts.ruby在我项目里用来添加代码合约(code contracts)到Ruby中.看起来差不多是这样的: Contract Num, Num => Num def add(a, b) a + b end 只要add方法被调用,参数和返回值都会被检查. 20秒 本周末,我对该库进行了测试,发现其性能非常糟: 这是在随机输入下,运行1000次以后的结果. 所以,当给一个函数加入合约功能后,

Ruby编程中的语法使用风格推荐_ruby专题

使用 :: 引用常量(包括类和模块)和构造器 (比如 Array() 或者 Nokogiri::HTML()).     永远不要使用 :: 来调用方法. # bad SomeClass::some_method some_object::some_method # good SomeClass.some_method some_object.some_method SomeModule::SomeClass::SOME_CONST SomeModule::SomeClass()     使用括