ruby-on-rails - 制作一个新数组被认为是动态分配 Ruby

标签 ruby-on-rails ruby

我想制作一个数组来保存每个用户的分数。该数组的一个示例是 ScoreArray["example@yahoo.com"] = 10。为此,我需要先实例化数组。所以我尝试了类似的方法:

ScoreArray = Array.new

    @sugested.each do |gg|
      nr = 0
      @followees.each do |ff|
        if (ff.email == gg.email) then nr = nr + 1
        end
      end
      if(gg.following.count != 0) then
        score = ( nr/@followees.count ) * ( gg.followers.count / gg.following.count)
        ScoreArray[gg.email] = score
        pry.bind
      else score = 0
      end 
    end

所有这些代码都在一个名为 candidatesmethod 中。当我尝试运行 rails server 时,我在调用此方法的页面上收到以下错误消息:

home/flo/Ruby/Licenta/honk_app/app/controllers/application_controller.rb:45: dynamic constant assignment ScoreArray = Array.new ^

有什么办法可以避免这个问题吗?为什么要这样做?(据我所知,这是因为它在方法内部,而 ruby​​ 不喜欢每次调用方法时都实例化“常量”。问题是,这不是常量...对于每个登录的用户,我将有一个单独的数组)。

最佳答案

在 ruby​​ 中,前导大写字母表示常量 - 如果您不需要常量,则以小写字母开头(如果局部变量不足以满足您的目的,请考虑使用实例变量)

此外数组不能像你展示的那样使用

some_array[gg.email]

如果 gg.email 是一个字符串,将引发异常

关于ruby-on-rails - 制作一个新数组被认为是动态分配 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28656869/

相关文章:

ruby-on-rails - 从嵌套哈希中删除所有相似的键

ruby-on-rails - Rails 应用程序上的轮询、网络套接字或 cometd

mysql - 如何从 Cloud9 IDE 中的 Rails 应用程序下载 MySQL 数据库

javascript - 如何绑定(bind)到 Mercury 上保存的事件?

ruby - 使用适用于 Ruby 的 AWS 开发工具包发布到 SNS 主题时指定区域

ruby-on-rails - Ruby - 自动运行辅助方法

ruby-on-rails - rails : Allow users to upvote only once a pin

mysql - Ruby on Rails 安装问题 (Windows)

Ruby:使用 Mechanize 访问我的表单时出现问题!

Ruby 模块前置 vs 派生