14 March 2015

前言

看完一遍《Ruby元编程》的第一部分,从买回来到今天快半年了,断断续续的看了一段时间。搞了一圈,最近又回到Ruby和Rails,花了点时间,细看了一下,感觉写的还是挺好,很多知识都讲的相当透彻。

Ruby方面,语法上很不熟,遇到问题主要靠搜和猜,就这样也工作了大半年,从长远看来,基础知识的缺乏始终短板,故下决心好好学习学习。

正文

敲了一遍某个复杂的例子,这里介绍的知识就是关于过滤器属性访问器等类宏的实现方法。

# 类扩展混入的例子
module MyMixin
  def self.included(base)    # 使用Module#included钩子方法 
    base.extend ClassMethods
  end

  def test # 这是类的实例方法
    # do sth
  end

  # 定义了内部模块,用来混入类宏
  module  ClassMethods
    def attr_checked(attr, &validation)
      define_method "#{attr}=" do |value|
        raise 'Invalid attribute' unless validation.call(value)
        instance_varible_set("@#{attr}", value)
      end

      define_method attr do 
        instance_variable_get "@#{attr}"
      end
    end
  end
end

class T; include MyMixin; end

这里的混入,其实是将方法定义到类eigenclass中了,从而成为了类的方法。

后记

Ruby方面,语法上很不熟,遇到问题主要靠搜和猜,就这样也工作了大半年,从长远看来,基础知识的缺乏始终短板,故下决心好好学习学习。




傲娇的使用Disqus