用 block 做参数来创建一个 hash 的话,在每次用 Hash#[] 方法来读取一个 key 时,如果 Key 找不到,会自动调用你传入的 block。
具体到你的例子, hash[:one] << "uno"
这行代码,发生的情况如下:
{|hash, key| hash[key] = [] }
, 效果就是hash[:one] = []
,然后返回 hash[:one] 的值,也就是一个数组于是,hash[:one] 的值,就变成了 ["uno"]
Hash#fetch 与 Hash#[] 是不同的方法,实现不同。
不同的类,实现的 clone 方法不一样。Array 对第一层对象做深度拷贝,但是嵌套的对象还是 shadow copy。试试这个:
ruby-1.9.2-p0 > a = Array.new
[]
ruby-1.9.2-p0 > a << ['first']
[
[0] [
[0] "first"
]
]
ruby-1.9.2-p0 > b = a.clone
[
[0] [
[0] "first"
]
]
ruby-1.9.2-p0 > b[0] << 'second'
[
[0] "first",
[1] "second"
]
ruby-1.9.2-p0 > a
[
[0] [
[0] "first",
[1] "second"
]
]
发工资吗?
所有发邮件的同学,我都邀请加入了。
#10 楼 @inetufo 是的,Rabel 和 Ruby China 的设计,都来自 V2EX: http://www.v2ex.com
第二期开放申请,限期一个月:http://ruby-china.org/topics/1669
第二期开放申请了:http://ruby-china.org/topics/1669
限期一个月。
今天正想试试。
@huacnlee 提交了一个 pull request: https://github.com/huacnlee/rails-settings-cached/pull/7
项目中用到这个 gem,小小贡献一下。
有个问题:在使用rails g settings foobar
之后,生成的 Model,默认不是带缓存的:
class Foobar < RailsSettings::Settings
end
修正的话,也比较简单,修改一下 generator 里面的 model.rb 文件就好。
忘记写 rspec 测试了吧。敏感字段要测试的。
目前在用樱桃青轴。
我用 Mac,暂时忍受了键盘上的 windows logo。青轴手感真的是一流。
我是 Rabel 的作者,Rabel 是一套简洁的商业论坛程序,使用 Rails 3.2.1 开发,拥有丰富的 rspec 和 cucumber 测试用例。既然这里要求是商业/企业项目,我就大言不惭的推荐一下 Rabel。
同时,我正在做基于 Rabel 源代码的免费培训活动。
感兴趣的同学,可以搜索rabelapp
这个关键字,或者查看我的个人主页。
#59 楼 @s200612321 #56 楼 @yjdwbj
暂时在这里跟帖报名。