2009-01-28 38 views
14

Tôi vừa học được những điều cơ bản của Ruby sau khi rất hài lòng với Python trong vài năm (tôi vẫn đang sử dụng Python cho một số thứ), nhưng tôi muốn biết có một thành ngữ hoặc hack để giải quyết vấn đề cụ thể này.Chạy thư viện Ruby từ dòng lệnh

Tôi có một tập lệnh Ruby mà tôi muốn có thể làm require script_name với, nhưng tôi cũng muốn có thể chạy ruby script_name.rb từ thiết bị đầu cuối và để nó chạy dưới dạng tập lệnh dòng lệnh. Trong Python, điều này sẽ được thực hiện bằng cách có cấu trúc sau ở dưới cùng của tập lệnh:

if __name__ == '__main__': 
    # do something here 

Tuy nhiên, tôi dường như không thể tìm thấy tương đương trong Ruby. Có cách nào để phát hiện xem tập lệnh hiện tại có đang được chạy từ dòng lệnh không? Có lẽ một số phương pháp Kernel:: hoặc một cái gì đó? Lý tưởng nhất là những gì tôi muốn là một cái gì đó như thế này ở dưới cùng của kịch bản:

if from_command_line? 
    # do something here 
end 
+0

Bạn nên xem lại câu trả lời sau cho câu hỏi của mình vì chúng cũng bao gồm mã sao chép thành phần thử nghiệm lớp python. – QueueHammer

Trả lời

7

Bạn có thể tìm thấy một chức năng tương tự trong ruby.

__FILE__ tên tệp nguồn hiện tại.

$ 0 Chứa tên của tập lệnh đang được thực thi. Có thể được chuyển nhượng.

nguồn: Ruby Quick Ref

22

Bạn muốn sử dụng:

if __FILE__ == $0 
    # do stuff 
end 

__FILE__ là tên file nguồn và $0 là tên của kịch bản hiện đang được thực hiện.

5

Trong khi

if __FILE__ == $0 
    Foo.run 
end 

là phương pháp phổ biến, tôi hiện đang sử dụng

if File.identical?(__FILE__, $0) 
    Foo.run 
end 

vì chương trình như ruby-prof can make $0 not equal__FILE__ ngay cả khi bạn sử dụng --replace-progname.

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