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 に答える