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.
:
Bearbeitet durch User
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...
:
Bearbeitet durch User
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
:
Bearbeitet durch User
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.
options.rb:
1 | A = [ 1, 2, 3 ] |
test.rb:
1 | require_relative 'options.rb' |
2 | |
3 | puts A.inspect |
Test
1 | $ ruby test.rb |
2 | [1, 2, 3] |
:
Bearbeitet durch User
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.
Du kannst nur Kostanten, Module, Klassen oder Methoden per require laden. Die sauberste Lösung wäre wohl:
1 | module Options |
2 | A = 1 |
3 | B = 2 |
4 | C = 3 |
5 | end
|
1 | require_relative 'options' |
2 | |
3 | puts Options::A |
=> 1
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.