• Anmelden

1

Montag, 17. Januar 2011, 17:44

require

Hi,

der Befehl require scheint irgendwie nicht zu funktionieren. Bei mir findet es die Dateien nie.
Ich benutze RadRails als IDE und möchte aus demselben Projekt eine *.rb Datei mit einer anderen requiren.

Doch ich erhalte jedesmal folgende Fehlermeldung:

Ruby Quellcode

1
2
3
<internal:lib/rubygems/custom_require>:29:in `require': no such file to load -- config.rb (LoadError)
from <internal:lib/rubygems/custom_require>:29:in `require'
from file.rb:6:in `<main>'


Ich benutze require wie folgt:

Ruby Quellcode

1
2
3
require 'config.rb'
# oder
require "config.rb" # macht das überhaupt einen Unterschied?


Hat wer 'ne Idee wieso der das nicht macht? :D

2

Montag, 17. Januar 2011, 18:34

require sucht nicht einfach im aktuellen Ordner, sondern es durchsucht eine Reihe von Ordnern, wo Bibliotheken abgespeichert werden. Diese Ordner kannst du in der Variable $: einsehen und auch neue Ordner hinzufügen. In deinem Fall willst du Dateien über einen relativen Pfad einbinden. Hier kommt es darauf an, welcher Pfad als current working directory gesetzt. Das findest du raus in dem du Dir.pwd() aufrufst. Oftmals ist das nicht der Source-Ordner sondern der Projektordner selbst. Dann könntest du über require "./source/foo.rb" eine Datei aus dem Source-Ordner laden. Alternativ kannst du auch den source-Ordner in $: einfügen, das wäre imo sogar der beste Weg.

Ruby Quellcode

1
2
3
4
5
# muss einmalig aufgerufen werden
$: << "./source"
# danach kannst du Rubydateien in diesem Ordner per require einbinden
require "foo"
require "bla"


btw. "" und '' erzeugen beide Strings. Der Unterschied liegt darin wie bestimmte Kontrollzeichen interpretiert werden. In '' werden die meisten Kontrollzeichen escaped. 'Ein\nTest' ist also kein zweizeiliger Text sondern das \n wird tatsächlich als Backslash und n interpretiert. "Ein\nTest" hingegen wird als "Ein" + Zeilenumbruch + "Test" interpretiert. Auch viele andere Sachen wie Variablensubstitution gehen nur in der "" (und damit verwandten) Schreibweise.

btw²: In Ruby 1.8 müsste das current working directory schon im $: drinne stehen, so dass du dir das "./" auch sparen kannst. Ab 1.9 ist dies aber nicht mehr der Fall.
Bild
RMXP Grundkurs
1 2 3
Ruby/RGSS-Kurs

3

Montag, 17. Januar 2011, 20:27

Hey, danke für die Antwort. :)

Ruby Quellcode

1
require "./source/foo.rb"

Funktioniert nicht, aber mit

Ruby Quellcode

1
require "./foo.rb"

klappt es.

Damit wäre mein Problem gelöst. Besten dank. ^^

Evrey

Oberschurke im Ruhestand

Motto: "Satzzeichen sind keine Rudeltiere." - Chesra

  • Nachricht senden

4

Montag, 17. Januar 2011, 22:00

Wenn du Subordner nutzen willst, gibt es einen (hässlichen) Umweg. Bei absoluten Pfaden motzt Kernel.require nämlich nicht rum.

Ruby Quellcode

1
2
Kernel.require(File.join(File.dirname(__FILE__),'/meine/unter/ordner/mit/test.so'))
# oder halt require pfad
  • :medal: Werbung

    Bild

    Cpp Quellcode

    1
    
    #define TRUE FALSE //Happy debugging suckers
    (Einfach nur wundervoll.)
  • :palette: 1plus3 :cake:

    Bild
  • :fires: Nuuuhminaaah

    Bild
  • :medal: compétences

    mes compétences
    :heart_full: :heart_full: :heart_full: :heart_full: :heart_full: max.
    :ruler-triangle: Maps machen :heart_full: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :media-player: Musik machen :heart_full: :heart-half: :heart-empty: :heart-empty: :heart-empty:
    :cup: Scripts machen :heart_full: :heart_full: :heart_full: :heart_full: :heart-break:
    :paper: Story ausdenken :heart_full: :heart_full: :heart_full: :heart-empty: :heart-empty:
    :cut: Pixeln und so :heart-empty: :heart-empty: :heart-empty: :heart-empty: :heart-empty:
    :game: Events proggen :heart_full: :heart_full: :heart_full: :heart_full: :heart_full:
    (Dieser Tab ist rein satirisch.)
  • :folder-open: mes projets

    • :addressbook: Silentium
      :book: Name: Silentium
      :rmxp: Maker: Eigenbau (C++, x86-SSE/AVX-Assembly, Ruby/Lua)

      :paper: Story
      :game: NPCs
      :cup: Scripts
      :drill: Ressis
      :ruler-triangle: Maps
      :compile: Gesamt
      (3+4)% 42 69% 0815 -17.438 103.38% ± 6.3mm²

      (Die Tabelle erfüllt lediglich satirische Zwecke.)
    • :compile: Onyx
      Eine in C++ implementierte, modulare, plattformunabhängige, virtuelle Maschine. Die Test-Version ist bereits halb fertig. Ab dann gibt es vielleicht mehr Infos. Sie soll die auf dem ersten Blick LISP-artige und eigens dafür konstruierte Sprache Obsidian ausführen können. Experimentell wird auch ein Lua-Compiler für Onyx gebaut. Ziel ist eine leistungsfähige, virtuelle Maschine für beliebige Scriptsprachen. Theoretisch gesehen müsste man bloß noch einen kompatiblen Compiler schreiben, der Quellcode jener Sprache in Onyx-Assembly, oder direkt in Onyx-Bytecode übersetzt. Ob die jemand nutzen wird, ist eine andere Frage und nur ein sekundäres... nein, eher tertiäres Ziel dieser VM. Primär dient es mir lediglich dazu, mein Verständnis von Hardware, ISA, und Assembly zu vertiefen, sowie eigene Grenzen auszutesten.

      :exclamation: Warnung!
      Das Entwickeln einer virtuellen Maschine oder Programmiersprache (im wahnsinnigsten Fall beides) ist eine höchst komplizierte Tätigkeit, aus der viel Frust und Hirnmatsche hervor gehen. Sollte sich dennoch ein ähnlich wahnsinniger finden, der sowas zusammen schustern will, so lege ich ihm/ihr die folgenden Bücher ans Herz:
      • Compiler - Das Drachenbuch [978-3-8273-7097-6]
        Dieses Buch schlachtet ausführlich und leicht verständlich die Grundlagen bis hoch zu den Experten-Techniken des Compilerbaus aus. Es fängt mit der Automaten-Theorie und formalen Sprachen an, arbeitet sich durch Analysetechniken vor, und landet schließlich bei Techniken wie Optimierung und Register-Zuweisung. Das Buch wiegt 3Kg oder 4Kg. Hab's mal gewogen. Ist also nicht gerade die Lektüre für unterwegs.

      • Computerarchitektur [3-8273-7016-7]
        Hier werden leicht verständlich die wichtigsten Entwicklungen der Rechnerarchitekturen erklärt (Gut, das Buch ist in die Jahre gekommen, aber der Weg zu heute ist ein winziger Schritt, den man sich nach diesem Buch selbst erdenken kann). Hauptbestandteil des Buchs ist eine relativ umfassende Betrachtung der Funktionsweise dreier gänzlich unterschiedlicher, aber dominierender Prozessor-Typen am Beispiel des Pentium II, UltraSPARC II, sowie picoJava. Die meisten Elemente dieses Buchs sind zwar für die Konstruktion einer virtuellen Maschine irrelevant, oder aufgrund der Tatsache, dass die VM Software ist und z.B. Byte-Grenzen hat, sogar zu Leistungseinbußen führen kann, doch ist ein hinreichendes Verständnis dieser Maschinen, mit denen wir arbeiten, äußerst hilfreich für die Überlegungen, wie die VM arbeiten soll.

      Es kann sehr hilfreich und inspirierend sein, den Code quelloffener, virtueller Maschinen anderer Sprachen zu überfliegen. Meine Lieblings-Quelle war und ist stets die VM von Lua. Sie ist schlank, verständlich, in C implementiert, und basiert im Gegensatz zu vielen anderen Scriptsprachen-VMs auf einer Register-Maschine statt einer Stapelmaschine. Es wäre natürlich vorteilhaft, die entsprechende Sprache zu verstehen, in der man auch die eigene VM implementieren will. Weiterhin ist es äußerst vorteilhaft, eine leistungsstarke und bequeme Sprache wie C++ zu beherrschen, um die VM zu implementieren. Und bevor irgendwer auf die Idee kommt: Assembly ist NICHT als dominierende Sprache für den Bau einer VM geeignet. Wer die Frage des "Warum?" nicht beantworten kann, sollte zunächst die gewählte Sprache und Assembly hinreichend verstehen lernen, und es dann erneut mit der Frage versuchen. Es lohnt sich dennoch, Assembly zu lernen. Allein schon, um erneut das Verständnis zu vertiefen, zumal ihr mehr oder weniger gezwungen seid, auch für eure VM eine Assembler-Sprache zu entwickeln (Außer natürlich ihr schreibt eure Test-Programme Bit für Bit ;3).
  • :locale: enfin

    Je ne peux pas parler français.
    C'est tout ce que Goodle et les restes de cours de français.
Signaturstand: 24.07.2013

Social Bookmarks