Ich habe > 2000 Zeilen Struct-Definitionen, die in ~20 Array eingefügt
werden. Das Ganze ist in einer eigenen Quell-Datei options.rb.
Die Array-Variablen werden in einer Methode gebraucht.
Ich will diese Methode aber übersichtlich halten und deswegen die > 2000
Zeilen nicht einfach dort hinein kopieren, sondern den Text aus
options.rb wie in c includen.
Nur: wie bekommt man das hin?
Eric B. schrieb:> Google kaputt?
Au Mann. Wie wärs, wenn du erst mal versuchtest zu verstehen, worum es
geht, ehe du auf diese strunzdumme Tour kommst?
> http://www.tutorialspoint.com/ruby/ruby_modules.htm
Solche "Experten" liebe ich... Frech, aber nicht die Spur von einer
Ahnung.
Ich benutze für solche config-Sachen JSON files. Die sind lesbar, und
ruby kann das schön parsen.
im controller zum beispiel:
require 'json'
@data_hash = JSON.parse(File.read('parameter_config.json'))
und in der view dann einfach mit :parameter (oder wie auch immer der key
heisst)
Vielleicht ist das eine Alternative?
devynF schrieb:> Ich benutze für solche config-Sachen JSON files. Die sind lesbar, und> ruby kann das schön parsen.
Das wäre eine Möglichkeit, die Sache anders zu lösen, aber die Daten,
die da importiert werden sollen, sind sperrig und häßlich - die bekommt
man auch mit JSON nicht übersichtlich.
Mein erster Versuch ging schief:
1
eval(File.open('./options.rb').read)
Es gibt das Ergebnis der letzten Zuweisung zurück, aber keine der
Variablen war hinterher bekannt - weiß der Teufel, warum.
Der zweite Versuch:
Aus jeder Variablen eine Methode bauen, die die Variable konstruiert und
den ganzen Kladaradatsch in einen Modul verpackt. Den dann requiret und
includet.
So gehts...
Uhu U. schrieb:> Eric B. schrieb:>> Google kaputt?>> Au Mann. Wie wärs, wenn du erst mal versuchtest zu verstehen, worum es> geht, ehe du auf diese strunzdumme Tour kommst?
Au mann, wie wäre es dann damit erstmal das Problem richtig zu
beschreiben.
Eric B. schrieb:> Au mann, wie wäre es dann damit erstmal das Problem richtig zu> beschreiben.
Bei Leuten, die nicht lesen können, nutzt das nichts.
Diese Formulierung aus dem Eingangsposting ist jedenfalls ziemlich
eindeutig:
> den Text aus options.rb wie in c includen.
OT:
Dieses "such doch bei Google" gerufe geht irgendwann mal noch nach
hinten los.
Mir passierts jetzt schon häufig das bei ner Suche nach einem Problem
zwar passende Fragestellungen gefunden werden aber als Antwort nur auf
Google verwiesen wird.
Was glaubt ihr wo die tollen Lösungen bei Google herkommen - da hat
tatsächlich mal jemand auf eine Frage mit der Lösung geantwortet...
Tek schrieb:> Was glaubt ihr wo die tollen Lösungen bei Google herkommen - da hat> tatsächlich mal jemand auf eine Frage mit der Lösung geantwortet...
Meine Lösung steht hier:
Beitrag "Re: [ruby] Wie kann man Ruby-Text aus einer Datei einkopieren"
Aber ich kann dir nur voll zustimmen, gar zu oft findet man eine Frage
mit dem Problem, das man gerade hat und am Ende vielleicht auch noch
eine Notiz, es sei gelöst, aber wie die Lösung aussieht, wird
verschwiegen.
Manche Leute schaffen es eben gerade mit Ach und Krach bis zum eigenen
Bauchnabel zu denken...
Uhu U. schrieb:> Diese Formulierung aus dem Eingangsposting ist jedenfalls ziemlich> eindeutig:>>> den Text aus options.rb wie in c includen.
Ich verstehe dann aber wirklich auch nicht, warum
1
require 'options.rb'
oder
1
include 'options.rb'
für Dich nicht funktioniert! Das sind die üblichen Wege.
Und ich denke, da ist ein Unterschied, ob jemand nur zur Nutzung einer
Suchmaschine aufruft, oder die Suchmaschine für Dich bedient und Dir das
Ergebnis der Suche liefert.
Und da es jetzt schon mindestens 2 Leute gibt, die Deine Frage
offensichtlich nicht verstanden haben, könnte es auch an Deiner Frage
liegen. Das sollte man als Fragesteller zumindest mal im Bereich des
Möglichen behalten und nicht gleich rumpoltern, wenn die Antwort nicht
passt!
schönen Abend,
Torsten
Torsten R. schrieb:> Ich verstehe dann aber wirklich auch nicht, warum> require 'options.rb'>> oderinclude 'options.rb'>> für Dich nicht funktioniert!
Weil require eben nicht wie das c-include funktioniert - was ja
keineswegs neu ist - und include in ruby nochmal was völlig anderes ist.
Wenn man Ruby nicht kennt, dann sollte man sich eine Antwort auf die
Frage schlicht sparen und einen rotzig auf Google zu verweisen
funktioniert eben auch nicht, um sich als den großen Crack zu
profilieren.
Uhu U. schrieb:> ...dann sollte man sich eine Antwort auf die> Frage schlicht sparen und einen rotzig auf Google zu verweisen> funktioniert eben auch nicht, um sich als den großen Crack zu> profilieren.
...und dann gibt es noch die Leute, denen man am Besten überhaupt nicht
antwortet, weil jede Antwort mit Widerworten und Undank quittiert
wird.
Dass diese Trivialkonstellation funktioniert, weiß ich und ich hatte
vor, das genau so zu machen.
In der ursprünglichen options.rb wurde zunächst ein Struct-Typ definiert
und anschließend wurden die Arrays mit solchen Structs geladen. Dazu
noch etliche Kommentare, das wars. Die Daten enthalten teilweise
ziemlich lange String- und Array-Literale.
Wenn ich options.rb direkt in rdebug geladen habe, konnte ich alle
Variablen zugreifen.
Wenn options.rb per require im Hauptmodul geladen wurden, waren sie nach
dem require nicht mehr definiert.
Eine mögliche Ursache könnten die Variablen sein: sie waren nicht global
- also als $variable - definiert. Ich habe sporadisch Probleme mit dem
Gültigkeitsbereich von Variablen gehabt, wenn ich Variable ohne $ auf
Dateilevel verwendet habe.
Die Lösung: in options.rb werden die Arrays jeweils in einer Methode
aufgebaut, die das Array als Ergebnis zurück gibt. Das Ganze in einen
Modul verpackt und per require und include im Hauptmodul geladen.
Die Idee, das mit einer Art c-include dort zu machen, wo die Daten
gebraucht werden, führt bei ruby in die Irre.