21

Tôi đang cố yêu cầu một tệp cào mà tôi đã tạo bên trong một tệp khác mà tôi có. Hai tệp này nằm bên trong hai thư mục khác nhau. Tôi đã yêu cầu ở trên cùng của tập tin đầu tiên của tôi với tên của tập tin thứ hai bên trong dấu ngoặc kép sau khi yêu cầu. Nó nói với tôi rằng nó không thể tải tập tin như vậy. Điều đó có nghĩa là vì trong thư mục khác, nó không thể tìm thấy? Tôi đã thử dán đường dẫn đầy đủ vào tệp thứ hai nhưng vẫn không thể tải tệp. Có ai biết cách tôi có thể tải tệp thứ hai vào tệp đầu tiên không?Cách yêu cầu một tập tin ruby ​​từ một thư mục khác

Cảm ơn trước

+0

Bạn đã thử thư mục 'require '/ other_file'' chưa? –

+0

Có, tôi đã thử điều đó. Tôi đã cho nó đường dẫn đầy đủ của nó nhưng vẫn không thể tải nó – thedarkknight228

+0

thử require_relative –

Trả lời

7

Từ tài liệu: Đề xuất sử dụng yêu cầu tương đối. Docs

require_relative bổ sung phương thức dựng sẵn yêu cầu bằng cách cho phép bạn tải tệp có liên quan đến tệp có chứa câu lệnh require_relative.

Khi bạn sử dụng require để tải tệp, bạn thường truy cập chức năng đã được cài đặt đúng và có thể truy cập được trong hệ thống của bạn. yêu cầu không cung cấp giải pháp tốt để tải tệp trong mã của dự án. Điều này có thể hữu ích trong giai đoạn phát triển, để truy cập dữ liệu thử nghiệm, hoặc thậm chí truy cập các tệp bị "khóa" bên trong một dự án, không nhằm mục đích sử dụng bên ngoài.

Ví dụ, nếu bạn có các lớp học đơn vị kiểm tra trong thư mục "test", và dữ liệu cho họ dưới sự kiểm tra "thử nghiệm/dữ liệu" thư mục, sau đó bạn có thể sử dụng một dòng như thế này trong một trường hợp thử nghiệm:

require_relative "data/customer_data_1" 
44

require sẽ tìm kiếm tệp chỉ trong một tập hợp các vị trí được gọi là "Đường dẫn tải". Bạn có thể xem đường dẫn tải bằng cách sử dụng biến toàn cục $LOAD_PATH trong phiên tập lệnh hoặc phiên làm việc. Nếu nó không có trong đường dẫn tải, nó sẽ không tìm thấy nó.

Ruby 1.9 đã giới thiệu require_relative tìm kiếm nào sử dụng vị trí của tệp hiện tại làm điểm bắt đầu.

# Will search $LOAD_PATH for file. 
require 'test/unit' 
# Notice the '/' which tells it to look in the 
# 'test' folder for a file named 'unit.rb' 

# Will look in current folder of file 
require_relative 'my_folder/my_file' 
# Will search in 'my_folder' for the file 'my_file.rb' 

Lưu ý rằng require_relative sẽ không hoạt động trong irb.

Cũng lưu ý rằng nếu bạn thực sự muốn sử dụng require, bạn có thể bắt đầu tập lệnh của mình bằng cách thêm vị trí vào biến số $LOAD_PATH.

$LOAD_PATH << File.join('users', 'yourusername', 'your_folder') 
# or 
$LOAD_PATH << File.dirname(__FILE__) 
# The second one enables you to move the file around on your 
# system and still operate correctly 
require 'my_file' 

Dưới đây là một số tài liệu bổ sung từ Ruby-Đốc:

+0

Cảm ơn câu trả lời tuyệt vời, nhưng chỉ một câu hỏi những gì đi vào bên trong dấu ngoặc đơn? Đây có phải là tên người dùng, tên người dùng và filepath vào thư mục – thedarkknight228

+0

Đó chỉ là một ví dụ. Tôi đã sử dụng nó như một ví dụ về thư mục chính của Linux. Nó có thể dễ dàng là 'File.join ('C:', 'Users', 'Charles', 'blahblah')' hoặc thậm chí 'File.dirname (__ FILE __)' sẽ thêm thư mục chứa tập tin hiện tại của bạn nằm trên đường dẫn tải. 'dirname' có lẽ tốt hơn vì nó sẽ cho phép bạn di chuyển tệp xung quanh và vẫn hoạt động. –

+0

Không yêu cầu không hoạt động khi cố gắng tải tệp Rake? – thedarkknight228

6

Cũng có thể làm như vậy:

require './something.rb' 

từ thư mục hiện hành bao gồm.

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