数值计算锁定ruby

数值计算锁定ruby,ruby,ruby-on-rails-3,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

我正试图实现一个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上的磁盘空间。。。喜欢它。有什么想法吗?

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

irb(main):004:0> "hi" * 32
=> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi"
而且你的
@@PRIME
肯定足够大,可以消耗大量的内存。如果是这种情况,将
添加到_i
应该可以修复它(并且您的条件可能会消失):


希望有帮助

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

irb(main):004:0> "hi" * 32
=> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi"
而且你的
@@PRIME
肯定足够大,可以消耗大量的内存。如果是这种情况,将
添加到_i
应该可以修复它(并且您的条件可能会消失):

希望有帮助