【发布时间】:2016-06-29 10:48:46
【问题描述】:
我在 Ruby 中尝试做的是创建一个对象,其名称来自字符串(例如在数组中)。然后我想在进一步的代码中使用该对象。
所以,例如:
array = ["a", "b", "c"]
array.each do |x|
send x + '_data'
x + '_data' = []
x + '_data' << "foo"
end
上面的当然行不通。
我整个上午都在为此绞尽脑汁、研究文档等等。感谢您的帮助!
有什么想法吗?
谢谢!
干杯, 凯尔
为清楚起见进行编辑:
好吧,我对send的理解有误。
对于数组中的每个字符串,我想创建一个数组。
所以上面的循环会创建三个数组:a_data,b_data,c_data
然后,我想用“foo”填充每个数组。
所以a_data[0] => "foo"
谢谢!
双重编辑:
这是我稍微改动过的实际代码,更全面地解释了我在做什么:
我有一个包含数千条推文的大 json 文件(不仅仅是文本,还有来自 twitter api 的完整 json)。
然后我有一个基于主题和相关关键字的哈希数组——例如“烹饪”->“器皿”、“烤箱”、“微波炉”。
我想遍历主题哈希数组并查看是否有任何主题关键字与推文文本中的单词匹配。
如果有匹配,我想将该推文添加到新数组中。
# topics is an array of hashes. Each hash contains title and list of keywords
topics.each do |topic|
# create an array with the topic's name to store matches
(topic[:title] + '_tweets') = []
topic[:keywords].each do |kw|
# loop through array of hashes (parsed json) to check for keyword matches in strings
tweets.each do |tweet|
text = tweet["text"]
# if string contains keyword, add to the topic's array
if text.include? kw
(topic[:title] + '_tweets') << tweet
end
end
end
感谢大家的帮助!
【问题讨论】:
-
object with a name是什么意思?使用send,您可以向对象发送消息,而不是创建它们。此外,对象没有名称,然后可以有一个名为name的属性,如果你定义它,你似乎没有这样做。请详细说明您要达到的目标。 -
你为什么要这样做?如果我理解正确,您希望能够dynamically set local variables,但正如帖子所建议的那样,使用哈希应该是好的
-
在我的实际代码中,我有一个哈希数组。每个散列都有一个名称和一个关键字列表。我想遍历散列数组,将散列的关键字与较大文本中的字符串匹配,然后将这些匹配的句子保存到带有散列名称的新数组中。
-
你需要这些变量做什么?动态设置变量是没有意义的,因为您只能硬编码其余部分。哈希似乎满足您的所有需求
-
根据您上次的评论,为什么不使用关键字匹配创建一个新哈希?
标签: ruby-on-rails ruby