我想制作一个数组来保存每个用户的分数。该数组的一个示例是 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
所有这些代码都在一个名为 candidates
的 method
中。当我尝试运行 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/