0

我正在尝试实现一个 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 上的磁盘空间......就像它的演出一样。有任何想法吗?

4

1 回答 1

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

希望有帮助!

于 2012-06-19T21:14:31.913 回答