【发布时间】:2023-03-30 18:02:01
【问题描述】:
我正在开发acts_as_taggable_on 插件,但有些东西我无法真正理解(即使它只是一个非常简单的代码行)。
放“之前:” + cache.inspect # cache.delete_if { |键,值| key.id == owner.id && key.class== owner.class } # 原代码行 cache.delete_if { |键,值| true } # 我的测试代码 放“之后:” + cache.inspect# outputbefore: {#<TaggableUser id: 1, name: nil>=>["dog"]}after: {# TaggableUser id: 1, name: nil>=>["dog"]}
我的问题是 cache.delete_if 不会删除任何东西,即使它总是评估为真。我只是不明白为什么......真的尝试了很多。这只是缓存哈希的问题。但我真的找不到关于那个特定哈希的任何特别之处。
缓存是用那个方法创建的:
def cached_owned_tag_list_on(上下文) variable_name = "@owned_#{context}_list" 缓存 = instance_variable_get(variable_name) || instance_variable_set(variable_name, {}) 结尾完整代码可以在这里查看(见第60行):http://github.com/mbleigh/acts-as-taggable-on/blob/master/lib/acts_as_taggable_on/acts_as_taggable_on/ownership.rb#L60
更进一步
当我在delete_if 之前执行rehash 时,它可以工作。什么可以“破坏”散列,在任何删除工作之前都需要重新散列?
【问题讨论】:
标签: ruby-on-rails ruby hash