Re: Ruby惯用法

阅读更多
http://www.iteye.com/post/140685

第一份收藏品。学习中。受益匪浅。great thanks。
另外,源文件/目录/namespace 管理、引入等有什么best practice?
我知道一个require,load 啥的。
还看到有些人实现了ruby import module。

另外,一点疑惑。
引用

(1..10).inject([]){|array, item| array << item}
inject有点难理解,相当于python的reduce和一些FP里的fold。inject的块变量有两个(这里是array和 item),第二个变量(item)用来枚举被inject的集合(这里是(1..10)这个range), 而第一个变量(array)由inject的参数初始化(这里是[],可选),并在block被反复执行时保持持久(相当于静态变量),而item则在每次枚举时被更新为下一个值。是不是越看越晕呼呢?哈哈哈


这个地方虽然没有太看懂,但是感觉和List Comprehension有些像。因为这里产生的结果是一个Array ( like List)。
而Reduce, Fold的结果一般是积累成一个总值。比如,sum。
当然,这只是我的印象。我对ruby inject, Reduce/Fold, List Comprehension了解都不深。
提出疑惑,盼高手解惑。

再看一眼,仿佛这Ruby Inject很符合Reduce/Fold的形式,都是把当前结果和下一个元素作为两个参数继续向下执行。

respond to 确实是个 best practice。

引用

命名参数的默认值
ruby其实没有所谓keyword argument,而是提供一个syntax sugar用hash模拟。但是怎么像Rails的方法那样同时利用命名参数和默认参数值呢?

def image(opt={})
    default_opt = {:height => 25, :width => 10}
    default_opt.merge! opt
end


这个解答了我看RoR book 时候的疑惑,keyword argument 果然是 hash 模拟的。重点学习。

引用

获取metaclass
这也比较常见了,各种动态伎俩的开始
sing = class << self; self; end


没看懂,重点学习。

你可能感兴趣的:(Ruby,Rails,FP,Python)