Mach das einfach:
require_relative 'tokenizer'
Wenn Sie dies in eine Ruby-Datei einfügen, die sich im selben Verzeichnis wie befindet tokenizer.rb
, funktioniert es einwandfrei, unabhängig von Ihrem aktuellen Arbeitsverzeichnis (CWD).
Erklärung, warum dies der beste Weg ist
Die anderen Antworten behaupten, Sie sollten sie verwenden require './tokenizer'
, aber das ist die falsche Antwort, da sie nur funktioniert, wenn Sie Ihren Ruby-Prozess in demselben Verzeichnis ausführen, in dem sie sich tokenizer.rb
befinden. Der einzige Grund require
, eine solche Verwendung in Betracht zu ziehen , wäre, wenn Sie dies benötigen unterstützt Ruby 1.8, das nicht hat require_relative
.
Die require './tokenizer'
Antwort mag heute für Sie funktionieren, schränkt jedoch die Art und Weise, wie Sie Ihren Ruby-Code ausführen können, unnötig ein. Wenn Sie morgen Ihre Dateien in ein anderes Verzeichnis verschieben oder Ihren Ruby-Prozess nur aus einem anderen Verzeichnis starten möchten, müssen Sie alle diese require
Anweisungen überdenken .
Die Verwendung require
für den Zugriff auf Dateien, die sich auf dem Ladepfad befinden, ist eine gute Sache, und Ruby Gems tun dies ständig. Aber Sie sollten das Argument nicht require
mit einem beginnen, es .
sei denn, Sie tun etwas ganz Besonderes und wissen, was Sie tun.
Wenn Sie Code schreiben, der Annahmen über seine Umgebung macht, sollten Sie sorgfältig überlegen, welche Annahmen zu treffen sind. In diesem Fall gibt es bis zu drei verschiedene Möglichkeiten, die tokenizer
Datei anzufordern, und jede geht von einer anderen Annahme aus:
require_relative 'path/to/tokenizer'
: Nimmt an, dass der relative Pfad zwischen den beiden Ruby-Quelldateien gleich bleibt.
require 'path/to/tokenizer'
: Nimmt an, dass path/to/tokenizer
sich das in einem der Verzeichnisse im Ladepfad befindet ( $LOAD_PATH
). Dies erfordert im Allgemeinen eine zusätzliche Einrichtung, da Sie dem Ladepfad etwas hinzufügen müssen.
require './path/to/tokenizer'
: Nimmt an, dass der relative Pfad vom aktuellen Arbeitsverzeichnis des Ruby-Prozesses tokenizer.rb
zum gleich bleibt.
Ich denke, dass für die meisten Menschen und die meisten Situationen die in den Optionen 1 und 2 getroffenen Annahmen im Laufe der Zeit eher zutreffen.