0

我有一些问题。我有很多带钥匙的绳子和他们的物品,钥匙总是一样的。字符串看起来像 "key1=value1;key2=value2..." 。所以我用数组作为值制作了全局哈希,并希望将字符串中的所有数据存储到该哈希中,所以我制作了函数:

<%
$all={}
for len in (0..$authors.length-1)
   $all[$authors[len]] = Array.new   #authors are defined and filled earlier
end

def add_hash(from)
   the_from = from.to_s.split(";")
   for one in the_from
      splitted = one.split("=")
      for j in (0..$authors.length.to_i-1)
         if($authors[j] == splitted[0])
            $all[$authors[j]] << splitted[1]
         end
      end
   end
end
%>

但它似乎不起作用,我的代码有问题吗?(注意:我只能使用 Ruby on Rails 代码)

4

2 回答 2

1

只是为了lolz)),原因

注意:我只能使用 Ruby on Rails 代码

将它放在 rails app 的初始化文件夹中的 lolo.rb

require 'singleton'

class Lolo < Hash
  include Singleton

  def initialize
    super([])
  end

  def add src
    src.to_s.split(";").each do |item|
      splitted = item.split("=")
      self[splitted[0]] = splitted[1]
    end
  end
end

在任何地方调用all =Lolo.instance访问哈希和all.add("key1=value1;key2=value2")添加元素,all.keys是作者列表

并且不要使用全局变量,因为它可能会导致很多问题

于 2012-06-19T11:28:17.330 回答
0

使用全局变量是一种不好的做法。不过如果你想使用没有问题。

在您的代码中,不允许使用键作为字符串访问哈希变量。因此,使用 to_sym 将键更改为符号

      (ie) $all[$authors[len].to_sym] similarly $all[$authors[j].to_sym]

这可能有效。

于 2012-06-19T11:29:13.343 回答