来自Ruby Enumerable查找方法:
将枚举中的每个条目传递给阻止。返回第一个块不为false的块。
使用有序哈希(对我来说),这会爆发:
(Rails 4.0.3)
> myhash = { 1 => [ {:a=>1, :b=>2}, { :a=>"cats", :b=> "dogs"} ] }
=> {1=>[{:a=>1, :b=>2}, {:a=>"cats", :b=>"dogs"}]}
> fleh = myhash[1]
=> [{:a=>1, :b=>2}, {:a=>"cats", :b=>"dogs"}]
好的,我想要带有“猫”的元素:
2.1.1 :003 > char = fleh.find{ |cur| cur[:a] = "cats" }
=> {:a=>"cats", :b=>2}
什?这看起来很有趣。让我们再试一次。让我们复制一下myhash:
> myhash = { 1 => [ {:a=>1, :b=>2}, { :a=>"cats", :b=> "dogs"} ] }
=> {1=>[{:a=>1, :b=>2}, {:a=>"cats", :b=>"dogs"}]}
> clone = myhash.clone
=> {1=>[{:a=>1, :b=>2}, {:a=>"cats", :b=>"dogs"}]}
好的,让我们看看会发生什么:
> fleh = clone[1]
=> [{:a=>1, :b=>2}, {:a=>"cats", :b=>"dogs"}]
> num = fleh.find { |cur| cur[:a] = "cats" }
=> {:a=>"cats", :b=>2}
当然是一样的。我的收藏怎么样?
> clone
=> {1=>[{:a=>"cats", :b=>2}, {:a=>"cats", :b=>"dogs"}]}
现在有些奇怪了。它写了我的{:a => 1}!让我们看看我的原始对象:
> myhash
=> {1=>[{:a=>"cats", :b=>2}, {:a=>"cats", :b=>"dogs"}]}
这令人不安。不仅没有找到我认为的那样(返回具有“猫”属性的'cur'的第一个实例,它在集合上写了,并且不知何故,它写了对象 It Was Cloned From < / em>的
有人能够重复这个吗?这在rails控制台中有些奇怪吗?如您所见,这是运行Ruby 2.1.1的Rails 4.0.3
答案 0 :(得分:4)
好的,这里没什么可看的。请继续前进。 。 。 捂脸 没有错误或任何东西。我分配该值。我需要做一个比较!!
num = fleh.find { |cur| cur[:a] == "cats" }
注意&#34; ==&#34;
我们得到:
=> {:a=>"cats", :b=>"dogs"}