数值计算锁定了红宝石

时间:2012-06-19 19:45:50

标签: ruby ruby-on-rails-3

我正在尝试实现一个id混淆方案,在其他地方借用一个简单的哈希。我在应用程序助手上添加了一个方法:

  @@M_ID = 2**31-1
  @@PRIME = 1580030173
  @@PRIME_INVERSE = 59260789 # (calculated from MAXID and PRIME offline)

  def obfuscate_id(x)
    if x
      return ((x * @@PRIME) & @@M_ID)
    else
      x
    end
  end

出于某种原因,每当调用它时,ruby会锁定,并开始占用我的mac上的磁盘空间...就像它的演出一样。任何想法?

1 个答案:

答案 0 :(得分:3)

您确定x是一个数字吗?如果x是一个字符串,我可以看到这种情况发生 - 在Ruby中,字符串时间数字给你重复的字符串连接:

irb(main):004:0> "hi" * 32
=> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi"

而你的@@PRIME肯定足以吃掉淫秽的记忆。如果是这种情况,添加to_i应该修复它(并且您的条件可能会消失):

irb(main):007:0> "hi".to_i * 32
=> 0
irb(main):008:0> "32".to_i * 32
=> 1024

希望有所帮助!