2010-09-25 41 views
11

Tôi có một thư mục chứa đầy đủ các tệp ruby ​​và khi tôi thử và yêu cầu một tệp ở một thư mục khác trong cùng thư mục sử dụng require 'file' Tôi nhận được LoadError nhưng khi tôi sử dụng require './file' mọi thứ đều hoạt động tốt. Ai đó có thể giải thích cho tôi tại sao điều này xảy ra và nếu có bất kỳ cách nào tôi có thể yêu cầu một tập tin mà không cần thêm một ./ vào tập tin?Ruby yêu cầu 'tệp' không hoạt động nhưng yêu cầu './file' thực hiện. Tại sao?

(Hình ảnh của thư mục): alt text

+0

thể trùng lặp của (http [sự khác biệt giữa yêu cầu \ _relative và yêu cầu trong Ruby là gì?]: // stackoverflow. com/questions/3672586/what-is-the-different-between-require-relative-and-require-in-ruby) –

Trả lời

16

Nếu bạn muốn require một tập tin không phải từ hệ thống $LOAD_PATH mà là tương đối so với thư mục của tập tin bạn đang require ing từ, bạn nên sử dụng require_relative. (Mà, như bạn có thể thấy, không chính xác là rộng rãi được ghi lại.)

3

Bạn không có thư mục hiện tại loadpath của bạn.

Kiểm tra các nội dung của $ LOAD_PATH biến

0

Mặc dù nó rất cũ, tôi nghĩ rằng một số thông tin bổ sung sẽ rất hữu ích cho người mới bắt đầu.

Cách tốt nhất để nghĩ về yêu cầu là liên quan đến biến UNIX $ PATH. Chỉ cần bằng cách làm mới, biến $ PATH trong UNIX là danh sách các thư mục nơi có thể tìm thấy các tệp thực thi. Vì vậy, khi bạn nhập tên của một chương trình trên bất kỳ thiết bị đầu cuối UNIX nào, máy tính của bạn sẽ xem qua các tệp thi hành trong các thư mục được chỉ định trong biến $ PATH của bạn. yêu cầu một cái gì đó rất giống nhau. Ví dụ, khi bạn viết yêu cầu 'set' ở đầu tệp Ruby của bạn, bạn đang yêu cầu Ruby xem qua một loạt các thư mục cho một thư viện có tên là set.rb (thư viện set của Ruby).

Vậy Ruby tìm tập hợp ở đâu.rb? Vâng, một lần nữa, Ruby có một cái gì đó rất giống với biến $ PATH của UNIX. Nó là biến toàn cục $ LOAD_PATH cũng đôi khi được biết bởi bí danh xấu xí và không mô tả $: (mà tôi không đề nghị sử dụng bằng cách này - mặc dù nó có thể là). Nó là một loạt các tên thư mục mà Ruby trông khi nó đi qua một yêu cầu.

Có đẹp bài thông tin here nơi bạn có thể tìm thêm thông tin về require, loadrequire_relative

Các vấn đề liên quan