使用包括?而不是跟踪器

时间:2009-09-13 05:35:19

标签: ruby

def add app
  @has_app[app] = true
  @apps << app
end

the code above中,而不是使用

@has_app[app] = true 

要跟踪'app'的存在,我们也不能说:

@apps.include? (app)

并取消@has_app

我试图理解为什么这里需要这个单独的变量(?)。

3 个答案:

答案 0 :(得分:1)

带问号的方法只检查变量的状态而不是修改它。因此,@apps.include?(app)将返回true或false,具体取决于具有给定对象的数组。

答案 1 :(得分:1)

如果这是代码的范围,那么是的,您可以简单地使用include?方法。这是冗余数据。但是,可能是这种布尔值的哈希值具有一些不同的含义,而这些含义并不清楚。

存在性能差异(对于大型列表),因为随着大小的增加,哈希查找比数组查找更快。 (如果这很重要,你需要仔细检查Ruby细节)。

答案 2 :(得分:0)

是的,我同意你的看法。 @has_app?不是必须的。我能想到为什么原始编码器使用它的唯一原因是出于性能的考虑。请注意:

 @has_app is a Hash 
 @app is an Array.