HeroKu 的 Koichi Sasada 写的,大致可以对 Ruby2.1 的特性有个概览:
地址: http://www.atdot.net/~ko1/activities/toruby05-ko1.pdf
根据回帖以及查论坛里老贴补充下面和 Ruby2.1 相关内容:
http://ruby-china.org/topics/14123 http://ruby-china.org/topics/13088
http://ruby-china.org/topics/11280 http://ruby-china.org/topics/11352
Ruby2.1 最重要的改变是 CG,这个老贴是讲的 Ruby2.0 的 CG,可以对比看看: http://ruby-china.org/topics/13237
记得以前 luikore 也发给一个 Ruby 2.1 walk thru,比较着看更有效果哦 http://ruby-china.org/topics/10906 http://ruby-china.org/topics/11280
后缀语法一览:
r
有理数i
虚数f
frozen string由于现在可以用有理数和虚数字面量,就不推荐 require 'mathn'
了,没必要而且会影响特化指令的速度
def
返回 symbol 超赞,现在可以这样写了 (DRY, explicit, 少个 closure 三者兼得):
before_filter def require_login
...
end
或者这样写 (python decorator style):
before_filter \
def require_login
...
end
然后访问 modifier 可以这么写:
private def _foo
...
end
特化 attr_reader 但不特化 attr_writer 可以这么写
attr_writer def foo
@foo ||= 'foo'
end
btw 关于这个 ||=
matz 有个 proposal ONCE{}
但不确定要不要加
爱怎么玩怎么玩...
{
def foo
end => def bar
end
}
假设有个 before_filter{ ... }
的实现是把 block 转换成 proc 对象保存下来,那么定义这个 block 的环境闭包会一直保持着不释放。不过就算调用多次 before_filter
还是只有 1 个闭包,而且一般人不会在这个闭包里放超大的临时数据而不清理,所以基本不碍事...
#19 楼 @blackanger 还真有 Scope Gate 作用域门
class def module 这三个都是 不过打开的方法也有 My_class = Class.new 不过这次 def 除了 define_method 又多了一招
x = 10
define_method(:require_login) do
puts ">#{x}"
end
before_filter def require_login
puts ">#{x}"
end