Was ich in Ruby versuche, ist ein Objekt mit einem Namen zu erstellen, der aus einer Zeichenfolge (z. B. in einem Array) stammt. Dann möchte ich dieses Objekt in weiterem Code verwenden.Ruby: Wie kann man auf Objekte zugreifen, die durch Senden ohne Name erstellt wurden?
So zum Beispiel:
array = ["a", "b", "c"]
array.each do |x|
send x + '_data'
x + '_data' = []
x + '_data' << "foo"
end
Der oben, natürlich nicht funktioniert.
Ich habe mein Gehirn, die Docs, und SO den ganzen Morgen über dies. Deine Hilfe wird geschätzt!
Irgendwelche Ideen?
Danke!
Cheers, Kyle
EDIT für Klarheit:
Ok, mein Verständnis von send
war falsch.
Für jede Zeichenfolge im Array möchte ich ein Array erstellen.
So über die Schleife drei Arrays erstellen würde: a_data
, b_data
, c_data
Dann möchte ich mit "foo" jedes Array füllen.
So a_data[0] => "foo"
Dank!
Doppel edit:
Hier ist mein leicht veränderter tatsächlicher Code mit voller Erklärung das, was ich tue:
Ich habe eine große JSON-Datei von Tausenden von Tweets (nicht nur der Text , aber die volle json von twitter api).
Ich habe dann eine Reihe von Hashes basierend auf Themen und zugehörigen Schlüsselwörtern - z.B. "Kochen" -> "Utensilien", "Backofen", "Mikrowelle".
Ich möchte das Array der Themenhashes durchlaufen und sehen, ob eines der Themen-Keywords mit Wörtern im Tweet-Text übereinstimmt.
Wenn es eine Übereinstimmung gibt, möchte ich diesen Tweet zu einem neuen Array hinzufügen.
# 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
Danke für Ihre Hilfe Jungs!
Was meinen Sie mit 'Objekt mit einem Namen'? Mit 'send' können Sie Nachrichten an Objekte senden und nicht erstellen. Außerdem haben Objekte keinen Namen und können dann ein Attribut namens name haben, wenn Sie es definieren, was Sie nicht zu tun scheinen. Bitte geben Sie weitere Einzelheiten darüber an, was Sie erreichen möchten. –
warum willst du das machen? Wenn ich dich richtig verstehe, willst du in der Lage sein [dynamisch lokale Variablen zu setzen] (http://stackoverflow.com/questions/4963678/dynamically-set-local-variables-in-ruby), aber wie der Post vorgeschlagen hat, mit einem Hash sollte gut sein – lusketeer
in meinem tatsächlichen Code, ich habe eine Reihe von Hashes. Jeder Hash hat einen Namen und eine Liste von Schlüsselwörtern. Ich möchte das Hash-Array durchlaufen, die Schlüsselwörter des Hashs mit Strings in einem größeren Text abgleichen und dann die Sätze dieser Übereinstimmungen in einem neuen Array mit dem Hash-Namen speichern. –