Chỉ cần làm điều này:
require_relative 'tokenizer'
Nếu bạn đặt tệp này trong tệp Ruby nằm trong cùng thư mục tokenizer.rb
, nó sẽ hoạt động tốt cho dù thư mục làm việc hiện tại của bạn (CWD) là gì.
Giải thích tại sao đây là cách tốt nhất
Các câu trả lời khác cho rằng bạn nên sử dụng require './tokenizer'
, nhưng đó là câu trả lời sai , vì nó sẽ chỉ hoạt động nếu bạn chạy quy trình Ruby của mình trong cùng thư mục tokenizer.rb
. Rất nhiều lý do duy nhất để xem xét sử dụng require
như vậy là nếu bạn cần hỗ trợ Ruby 1.8 mà không có require_relative
.
Câu require './tokenizer'
trả lời có thể phù hợp với bạn ngày hôm nay, nhưng nó không cần thiết giới hạn các cách mà bạn có thể chạy mã Ruby của mình. Ngày mai, nếu bạn muốn di chuyển các tệp của mình sang một thư mục khác hoặc chỉ muốn bắt đầu quá trình Ruby của mình từ một thư mục khác, bạn sẽ phải suy nghĩ lại về tất cả các require
tuyên bố đó.
Sử dụng require
để truy cập các tệp trên đường dẫn tải là một điều tốt và đá quý Ruby làm điều đó mọi lúc. Nhưng bạn không nên bắt đầu cuộc tranh cãi require
với một .
trừ khi bạn đang làm điều gì đó rất đặc biệt và biết bạn đang làm gì.
Khi bạn viết mã đưa ra các giả định về môi trường của nó, bạn nên suy nghĩ cẩn thận về những giả định cần thực hiện. Trong trường hợp này, có tối đa ba cách khác nhau để yêu cầu tokenizer
tệp và mỗi cách đưa ra một giả định khác nhau:
require_relative 'path/to/tokenizer'
: Giả sử rằng đường dẫn tương đối giữa hai tệp nguồn Ruby sẽ giữ nguyên.
require 'path/to/tokenizer'
: Giả sử path/to/tokenizer
bên trong một trong các thư mục trên đường dẫn tải ( $LOAD_PATH
). Điều này thường yêu cầu thiết lập thêm, vì bạn phải thêm một cái gì đó vào đường dẫn tải.
require './path/to/tokenizer'
: Giả sử rằng đường dẫn tương đối từ thư mục làm việc hiện tại của quy trình Ruby tokenizer.rb
sẽ không thay đổi.
Tôi nghĩ rằng đối với hầu hết mọi người và hầu hết các tình huống, các giả định được đưa ra trong các lựa chọn # 1 và # 2 có nhiều khả năng giữ đúng theo thời gian.