首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数值计算锁定红宝石

数值计算锁定红宝石
EN

Stack Overflow用户
提问于 2012-06-20 03:45:50
回答 1查看 50关注 0票数 0

我正在尝试实现一个id混淆方案,使用从别处借用的简单散列。我在应用程序帮助器上添加了一个方法:

代码语言:javascript
复制
  @@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上的磁盘空间……就像-演唱会一样。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-20 05:14:32

你确定x是一个数字吗?如果x是一个字符串,我可以看到这种情况的发生--在Ruby语言中,string乘以number会给出重复的字符串连接:

代码语言:javascript
复制
irb(main):004:0> "hi" * 32
=> "hihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihihi"

而且你的@@PRIME确实足够大,足以吞噬大量的内存。如果是这样的话,添加to_i应该可以解决这个问题(并且您的条件可能会消失):

代码语言:javascript
复制
irb(main):007:0> "hi".to_i * 32
=> 0
irb(main):008:0> "32".to_i * 32
=> 1024

希望这能有所帮助!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11108258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档