2012-06-19 57 views
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 

出于某种原因,每当这个被称为红宝石锁了起来,并开始在我的Mac吃了磁盘空间...喜欢 - 它的演出。有任何想法吗?

回答

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 

希望帮助!

+0

现货!谢谢.. – kolosy