2012-04-29 26 views
15

Tôi tìm thấy điều này trong tập tin Gemspec của surveyor gem. Dòng sau làm gì?

$:.push File.expand_path("../lib", __FILE__) 
require "surveyor/version" 

Tại sao điều $:.push làm gì? Đối với tôi, có vẻ như chỉ có requires tệp ../lib/surveyor/version của nó. nếu vậy, tôi không thể thay thế bằng cách làm theo một dòng?

require File.expand_path('../lib/surveyor/version', __FILE__) 

Cả hai đều giống nhau không? Nếu không, thì sự khác biệt là gì?

+4

Chỉ một lưu ý phụ: '$ LOAD_PATH << File.expand_path ...' thực hiện tương tự và trông hơi khó hiểu, IMHO. –

+0

thực sự, cảm ơn cho tip :) – CuriousMind

+3

Symbolhound.com rất hữu ích cho việc tìm kiếm cú pháp như thế này. –

Trả lời

15

$: là con đường tải Ruby, vì vậy trên thực tế thêm một thư mục con /lib của một thư mục trong đó __FILE__ cư trú để mảng này, để các file khác từ đá quý này có thể require d.

+0

Về cơ bản, một lối tắt của việc phải viết đường dẫn đầy đủ. Giải thích nó. Cảm ơn! – CuriousMind

+0

@Gaurish: Không chỉ vậy. Đá quý có thể giả định rằng nó nằm trong đường dẫn tải, trong đó nó sẽ không tải được nếu bạn yêu cầu nó bằng đường dẫn đầy đủ, mà không cần thêm nó vào đường dẫn tải. –