requireRuby'de göreceli bir dosyaya ve 1.8.x ve> = 1.9.2 sürümlerinde çalışmasını istiyorsanız en iyi uygulama nedir ?
Birkaç seçenek görüyorum:
- sadece yap
$LOAD_PATH << '.'ve her şeyi unut - yapmak
$LOAD_PATH << File.dirname(__FILE__) require './path/to/file'- eğer onay
RUBY_VERSION1.9.2 <ardından tanımlamakrequire_relativeolarakrequire, kullanımrequire_relativeher yerde sonradan duyulan yere require_relativezaten var olup olmadığını kontrol edin , eğer varsa, önceki durumda olduğu gibi ilerlemeye çalışın- alas gibi Ruby konstrüksiyonunda işe yaramaz gibi garip yapıları kullanın , çünkü, örneğin:
require File.join(File.dirname(__FILE__), 'path/to/file')$ cat caller.rb require File.join(File.dirname(__FILE__), 'path/to/file') $ cat path/to/file.rb puts 'Some testing' $ ruby caller Some testing $ pwd /tmp $ ruby /tmp/caller Some testing $ ruby tmp/caller tmp/caller.rb:1:in 'require': no such file to load -- tmp/path/to/file (LoadError) from tmp/caller.rb:1:in '<main>' - Garip yapı bile: işe yarıyor gibi görünüyor, ama garip ve iyi görünmüyor.
require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file') - Backports mücevher kullanın - biraz ağır, rubygems altyapısı gerektirir ve sadece diğer tonları içerir, sadece istiyorum
requiregöreli dosyalarla çalışmak .
Bir var StackOverflow'daki yakından ilişkili soru biraz daha fazla örnek verir, ancak net bir cevap vermez - en iyi uygulamadır.
Uygulamamın hem Ruby <1.9.2 hem de> = 1.9.2 üzerinde çalışmasını sağlamak için herkes tarafından kabul edilen iyi bir evrensel çözüm var mı?
GÜNCELLEME
Açıklama: Sadece "X yapabilirsin" gibi cevaplar istemiyorum - aslında, söz konusu seçeneklerin çoğundan daha önce bahsetmiştim. İstediğim mantığı , yani neden o diğerleri arasında seçilmelidir neden onun artıları ve eksileri vardır ve ne iyi yöntem vardır.
a.rbve b.rbgeçerli dizindeki (genellikle ile aynı dizinde) tercüman okuma ve ayrıştırma yapmak istiyorsanız, eski Ruby 1.8'de a.rb, sadece yazardınız require 'b've varsayılan arama yolu geçerli dizinin dahil olduğu gibi iyi olurdu. Daha modern Ruby 1.9'da, require_relative 'b'bu durumda require 'b'yalnızca standart kütüphane yollarında arama yapacağınız gibi yazmak zorunda kalacaksınız . Bu, düzgün yüklenmeyecek daha basit komut dosyaları için ileri ve geri uyumluluğu bozan şeydir (örneğin, komut dosyalarını kendiniz yükleyin ).
backportssadece require_relativecevabımı kullanabilirsin , cevabımı gör ...
requireve arasındaki farkrequire_relativenedir?