我有一些问题。我有很多钥匙和他们的随身物品的钥匙,钥匙总是一样的。字符串看起来像“key1 = value1; key2 = value2 ...”。所以我用数组作为值创建了全局Hash,并且想要将字符串中的所有数据存储到该哈希中,所以我创建了函数:
<%
$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代码)
答案 0 :(得分: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
是作者列表
并且不使用全局变量导致它可能导致很多问题
答案 1 :(得分:0)
使用全局变量是一种不好的做法。如果你想使用仍然没有问题。
在您的代码中,不允许使用key作为字符串访问哈希变量。因此,使用to_sym
将键更改为符号 (ie) $all[$authors[len].to_sym] similarly $all[$authors[j].to_sym]
这可能有效。