Tôi có một tập tin mã Ruby (somelogic.rb) có chứa một số phương pháp và các lớp, nằm trong nói,/home/user/code. Bây giờ tôi đang viết một lớp khác trong cùng một thư mục và muốn tham chiếu đến các phương thức và các lớp trong somelogic.rb. Làm thế nào để làm điều đó? Tôi đánh giá rất cao bất kỳ đầu vào nào.Làm cách nào để tham chiếu một phương thức trong một tệp mã Ruby khác?
Trả lời
Nếu bạn đang sử dụng của Ruby 1.9 hoặc mới hơn, đây là cách đơn giản nhất để làm điều đó:
require_relative 'somelogic'
Nếu bạn muốn mã của bạn để làm việc trong 1,9 trở lên các phiên bản của Ruby, bạn nên làm điều này thay vì:
require File.join File.dirname(__FILE__), 'somelogic'
Cho dù bạn chọn dòng nào, bạn nên đặt nó ở đầu tệp ruby của bạn. Sau đó, bất kỳ lớp, mô-đun hoặc biến toàn cục nào được xác định trong somelogic.rb sẽ có sẵn cho chương trình của bạn.
Check-out Ruby's require keyword
Trong tập thứ hai (nói otherlogic.rb) viết require '/home/user/code/somelogic.rb' trên dòng đầu tiên.
Vui lòng không làm điều đó. Mã của bạn sẽ không thể di động được. – mliebelt
Tôi biết tôi đã chắc chắn rằng tệp sẽ được đưa vào (1.9.2 có một số vấn đề với 'yêu cầu'). Nếu bạn đang ở trong cùng một thư mục, bạn chỉ cần yêu cầu 'otherlogic.rb' –
Dưới đây là kịch bản:
/home/user/code/somelogic.rb
class MyMath
def self.sin(number)
...
end
end
Bạn muốn sử dụng các phương pháp sin
trong tập tin khác của bạn mylogic.rb
.
Tùy thuộc vào phiên bản của ruby, thực hiện một điều sau đây:
mẫuRuby 1.8.x
require "somelogic"
class OtherThings
def some_method
MyMath.sin(42)
end
end
Việc sử dụng là dành cho tất cả các phiên bản ruby giống nhau, nhưng các tuyên bố đòi hỏi có thể khác nhau.
Ruby 1.9.x
require_relative "somelogic"
hoặc biến
Ruby 1.9.x
require "./somelogic"
Các biến thể đầu tiên làm việc tất cả các thời gian, thứ hai chỉ nếu bạn gọi ruby mylogic.rb
trong thư mục nơi mylogic.rb
và somelogic.rb
được đặt.
Nếu bạn muốn tải tập tin từ thư mục đó từ một điểm khởi đầu nằm trong thư mục khác, bạn nên sử dụng:
Ruby 1.8.x and Ruby 1.9.x
$: << File.dirname(__FILE__)
này mở rộng con đường tải của Ruby. Nó đọc đường dẫn (tương đối) của __FILE__
, nhận thư mục của nó và thêm đường dẫn (tuyệt đối) của thư mục đó vào đường dẫn tải của bạn. Vì vậy, khi thực hiện việc tra cứu bằng require
, các tệp sẽ được tìm thấy.
Có một sự khác biệt quan trọng giữa 'require './Somelogic'' và' require_relative' somelogic''. Sau này tìm kiếm một tệp * liên quan đến chính kịch bản lệnh *, trong khi tệp trước đó trông trong thư mục làm việc hiện tại. Hãy tưởng tượng chúng ta đang ở trong một thư mục có tên là "project" và chúng ta chạy chương trình Ruby "scripts/do_the_thing.rb". Nếu "do_the_thing.rb" sử dụng 'require_relative', nó sẽ tìm" project/scripts/somelogic.rb ". Mặt khác, nếu chúng ta viết 'require'./Somelogic'', nó sẽ tìm "project/somelogic.rb". – Chuck
Điểm tốt, tôi sẽ thêm điều đó vào câu trả lời. Cảm ơn rất nhiều! – mliebelt
Thêm vào những gì Chuck nói, thật tệ khi làm 'require './Somelogic'' bởi vì điều đó làm cho một assmuption về thư mục làm việc hiện tại của trình thông dịch ruby, do đó rất khó để sử dụng lại mã của bạn trong các dự án khác. –
- 1. Cú pháp để tham chiếu một phương thức trả về một biểu thức cho phương thức khác?
- 2. Làm cách nào tôi có thể tham chiếu đến một phương thức?
- 3. Cách tăng một lớp Giá trị tham chiếu nguyên trong java từ phương thức khác
- 4. Tham số tham chiếu Javadoc từ phương thức khác
- 5. Làm cách nào để chuyển tham chiếu dưới dạng tham số phương thức trên AppDomain?
- 6. Làm cách nào để điền vào trường tham chiếu trong phương thức ảo trong Mongoose?
- 7. Cách tham chiếu một dự án Java khác trong Eclipse
- 8. Làm cách nào để chuyển một phương thức như một tham số trong Python
- 9. Làm thế nào để gọi một phương thức từ phương thức khác trong Mục tiêu C?
- 10. Làm thế nào để tham khảo một viên ngọc địa phương trong ruby?
- 11. Làm thế nào để biến một phương thức Ruby thành một khối?
- 12. Làm cách nào để sao chép nội dung của tệp này sang tệp khác bằng phương thức tệp của Ruby?
- 13. Làm cách nào để tham chiếu các hàm trong các tệp khác bằng leiningen?
- 14. Làm cách nào để cache một phương thức với Ruby/Rails?
- 15. Làm thế nào để viết một đoạn mã để tạo ra một phương thức trong C#?
- 16. Làm cách nào để tham chiếu động một đối tượng?
- 17. Làm thế nào để tham chiếu một biểu thức tách trong Perl?
- 18. Làm cách nào để tạo một bộ tham chiếu const?
- 19. Có thể tham chiếu đến một tham số được truyền cho một phương thức trong khối được truyền trong ruby không?
- 20. Gọi một phương thức tĩnh từ một lớp trong một không gian tên khác trong PHP
- 21. Làm thế nào để bạn có thể lập trình xác định số tham chiếu đến một phương thức với C#
- 22. Làm thế nào để tham khảo một viên ngọc địa phương từ một kịch bản ruby?
- 23. Làm cách nào để di chuyển phương thức chính sang một lớp khác trong Scala?
- 24. Ruby - làm cách nào để chạy một phương thức trên mỗi phần tử mảng trên các luồng khác nhau?
- 25. Lưu một tham chiếu vào biến khác
- 26. Làm cách nào để tạo một nhóm các phương thức/thuộc tính trong một lớp?
- 27. Làm cách nào để gọi phương thức trợ giúp Rails từ bên trong một phương thức trợ giúp khác?
- 28. Làm thế nào để gọi một phương thức thông qua sự phản chiếu với một biểu thức lambda như một tham số?
- 29. Làm cách nào để tham chiếu tệp javascript?
- 30. Làm cách nào để đăng nhập mọi phương thức được gọi trong chương trình Ruby?
yêu cầu 'somelogic' –