05 2013 档案

 
【ruby】巧用类宏声明过期方法
摘要:如果你想重构某个类中的某个方法的名字,可是又不想影响已经调用该方法的其他代码,该如何处理呢?可以使用“类宏”技术,请看下面的代码: class MyClass def old_method(name) puts "hello " + name end def new_method(name) puts "hello " + name end def self.deprecate(old_method, new_method) define_method(old_method) do |*args, &block| warn "Warni 阅读全文
posted @ 2013-05-11 16:29 巴晓鹏 阅读(909) 评论(0) 推荐(1)
【ruby】详解扁平作用域
摘要:在一些语言中,比如java或C#,有内部作用域(inner scope)的概念。在内部作用域可以看到外部作用域(outer scope)中的变量。但ruby中没有这种嵌套式作用域的概念,它的作用域是截然分开的,一旦进入一个新的作用域,原先的绑定就会被替代为一组新的绑定。在ruby中,程序会在三个地方关闭前一个作用域,同时打开一个新的作用域:类定义、模块定义、方法。只要程序进入类、模块或者方法的定义,就会发生作用域切换。这三个边界分别用class,module和def关键字作为标志,每一个关键字都充当了一个作用域门(scope gate)。怎样让绑定穿越一个作用域门呢?比如下面的代码:my_va 阅读全文
posted @ 2013-05-05 08:28 巴晓鹏 阅读(1167) 评论(0) 推荐(2)
【ruby】详解proc与lambda的区别
摘要:从底层来看,使用【块】需要分两步,第一步,将代码打包备用;第二步,调用【块】(通过yield语句)来执行代码。这种“先打包代码,以后调用”的机制并不是【块】的专利。在ruby中,至少还有以下三种方法可以用来打包的代码。1、 使用proc,proc基本上就是一个由块转换成的对象;2、 使用lambda,它是proc的近亲;3、 使用方法。本文将重点讨论proc与lambda的区别。proc与lambda之间有两个主要区别,第一个区别与return关键字有关,第二个区别与参数校验有关。区别之一:return在lambda中,returen是指从lambda对象返回;def add(lam) l.. 阅读全文
posted @ 2013-05-04 11:17 巴晓鹏 阅读(2473) 评论(0) 推荐(2)
ruby 斐波那契的一种实现
摘要:先看代码:class Fixnum < Integer def fib a = [1,1]; 2.upto(self-1){|i| a[i] = a[i-1] + a[i-2]}; a end end puts 11.fib.to_s输出结果: [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]下面解释代码的含义:首先使用【打开类】技术,打开已有的Fixnum类,添加一个名为fib的方法,这样所有的Fixnum对象,比如1,2,3等数字都自动拥有了fib方法。方法第一行先定义一个数组,初始化两个数字【1,1】方法第二行,是一个循环... 阅读全文
posted @ 2013-05-03 08:10 巴晓鹏 阅读(406) 评论(0) 推荐(1)
ruby学习笔记之【动态定义方法】
摘要:可以利用Module#define_method()方法定义一个方法,只需要为其提供一个方法名和一个充当方法主体的块即可,示例代码如下:class MyClass define_method :my_method do |my_arg| my_arg * 3 endendobj = MyClass.newobj.my_method(2) #=> 6 阅读全文
posted @ 2013-05-02 09:26 巴晓鹏 阅读(242) 评论(0) 推荐(0)