2011-12-16 39 views
6

Có cách nào để tải các tệp chỉ khớp với một chuỗi cụ thể không? Ví dụ: giả sử tôi muốn tải các tệp khớp với account1.rbaccount2.rb v.v. Tôi muốn có thể làm điều gì đó nhưRuby 'require' với biểu thức ký tự đại diện

require File.expand_path("../account*.rb", __FILE__) 

nhưng tất nhiên điều này không có tác dụng. Cách tốt nhất để làm việc này là gì?

Trả lời

12

Bạn có thể làm điều tương tự với một vòng lặp:

Dir.glob(File.expand_path("../account*.rb", __FILE__)).each do |file| 
    require file 
end 

Phương pháp expand_path chỉ giải quyết lối đi. Nó không mở rộng các ký tự đại diện.

+0

nếu tôi muốn khớp một ký tự cụ thể thì sao? "account_a.rb", "account_b.rb" và cứ như vậy – denniss

+1

Một ký tự đơn được biểu diễn bằng '?'. – tadman

1

Tôi đã cố gắng sử dụng điều này để tạo bộ thử nghiệm cho Minitest mà không cần sử dụng Rspec. Câu trả lời được chấp nhận không làm việc cho tôi, nhưng điều này đã làm:

require "minitest/autorun" 

Dir.glob("*_test.rb").each do |file| 
    require_relative file 
end 
0

tôi sử dụng này:

Dir.entries(File.dirname(__FILE__)). 

    grep(/test.*\.rb/) { | file | require_relative file } 

Thật không may Ruby không cho phép dòng mới trước khi chấm, vì vậy hình thức lý tưởng không công việc:

Dir.entries(File.dirname(__FILE__)) 

    .grep(/test.*\.rb/) { | file | require_relative file } 
Các vấn đề liên quan