2012-01-18 30 views
11
def load_lib 
    path = File.join(File.dirname(__FILE__), 'lib') 
    failures = [] 
    Dir.glob("#{path}/**/*.rb").each { |file| 
     puts "loading: #{file} ... " 
    } 
end 

Có tập lệnh. Khi tôi đặt từng dòng riêng lẻ, chức năng load_lib khả dụng và hoạt động tốt. Nhưng khi tôi dán nó vào IRB trong một đoạn lớn (terminal Ubuntu, Sh Ctrl C) nó freaks ra tại dòng Dir.glob(... và thấy điều này:Tại sao đôi khi tôi không thích thú khi tôi dán một tập lệnh?

Display all 931 possibilities? (y or n) 
! 
!= 
!~ 
<=> 
.... [dozens of lines in this vein] 

và sau đó phương pháp này không được tạo ra ở tất cả.

Dưới đây là những gì xảy ra (thành công) khi tôi dán nó vào một dòng tại một thời điểm:

>> def load_lib 
>>  path = File.join(File.dirname(__FILE__), 'lib') 
>>  failures = [] 
>> Dir.glob("#{path}/**/*.rb").each { |file| 
?> puts file 
>> } 
>> end 
=> nil 
>> load_lib 
./lib/alpha_processor.rb 
./lib/development_mail_interceptor.rb 
./lib/service_processors/beta_processor.rb 

Có điều gì đó về [] hoặc {} rằng IRB không thích khi họ đang dán vào?

+0

Một cách khác mà irb có thể gây lỗi cho bạn http://stackoverflow.com/questions/39269032/why-rails-can-use-if-as-hash-key-but-not-in-ruby/ 39271791 # 39271791 – lulalala

Trả lời

25

Đó là do các ký tự TAB bạn có trong tệp nguồn của mình. Thụt lề với không gian. :-)

+2

Chính xác hơn, các ký tự tab kích hoạt tính năng tự động hoàn thành của irb. Mà bạn rõ ràng không muốn khi dán trong mã. Cộng đồng Ruby đã tiêu chuẩn hóa khá nhiều vào 2 điểm thụt lề của không gian, vì vậy hãy sử dụng nó. –

+0

@AlexWayne: cảm ơn vì đã làm rõ. Nên tự mình làm. –

+0

Tab được sử dụng để tự động hoàn thành trong 'irb' vì vậy đôi khi việc cắt và dán sẽ kích hoạt tính năng này. Tôi nghĩ rằng có một tùy chọn để tắt nó đi nhưng tôi chỉ có thể tìm thấy tài liệu tham khảo về cách bật nó lên. – tadman

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