require
Ruby'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_VERSION
1.9.2 <ardından tanımlamakrequire_relative
olarakrequire
, kullanımrequire_relative
her yerde sonradan duyulan yere require_relative
zaten 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
require
gö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.rb
ve b.rb
geç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 ).
backports
sadece require_relative
cevabımı kullanabilirsin , cevabımı gör ...
require
ve arasındaki farkrequire_relative
nedir?