我正在製作acts_as_taggable_on插件,但有些東西我真的不明白(即使它只是一個非常簡單的代碼行)。hash.delete_if {| key,value | true}不會刪除...爲什麼?
puts "before: " + cache.inspect # cache.delete_if { |key, value| key.id == owner.id && key.class == owner.class } # original code line cache.delete_if { |key, value| true } # my test code puts "after: " + cache.inspect
# output
before: {#<TaggableUser id: 1, name: nil>=>["dog"]}
after: {# TaggableUser id: 1, name: nil>=>["dog"]}
我的問題是,cache.delete_if不會刪除任何東西,即使它始終計算爲真。我只是不明白爲什麼......而且真的嘗試了很多。這只是緩存哈希的問題。但我真的無法找到有關特定散列的任何特殊內容。
緩存在該方法創建:
def cached_owned_tag_list_on(context) variable_name = "@owned_#{context}_list" cache = instance_variable_get(variable_name) || instance_variable_set(variable_name, {}) end
完整的代碼在這裏可以查看(見行60):http://github.com/mbleigh/acts-as-taggable-on/blob/master/lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb#L60
一個步驟進一步
當我做一個rehash
之前它的工作原理是delete_if
。什麼可以在任何刪除操作之前以「重新哈希」的方式「破壞」哈希?
TIL不會散列AR模型。非常可愛的答案。 – 2013-06-18 04:34:05