SORU
2 Aralık 2010, PERŞEMBE


Ruby: vs require_relative - en iyi Ruby <1.9.2 hem de geçici çalışan uygulama ve > gerektirir;=1.9.2

Eğer 2 ** istersem en iyi uygulama akrabası Ruby dosyaveHem 1.8 çalışmak istiyorum.x ve >=1.9.2?

Bir kaç seçenek görüyorum:

  • sadece $LOAD_PATH << '.' ve her şeyi unutmak
  • $LOAD_PATH << File.dirname(__FILE__)
  • require './path/to/file'
  • RUBY_VERSION < 1.9.2, her yerde daha sonra ihtiyaç duyulduğunda require_relative require, 9 ** kullanımı olarak tanımlamak olmadığını kontrol edin
  • eğer öyle olursa eğer require_relative zaten varsa kontrol edin, Bir önceki durumda olduğu gibi devam etmeye çalışayım
  • require File.join(File.dirname(__FILE__), 'path/to/file') gibi garip yapılar kullanın
    - Ruby 1.9 çalışmak gibi görünmüyor ne yazık ki iyice, çünkü, örneğin:
    $ 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>'
  • Daha da tuhafı, inşaat:
    require File.join(File.expand_path(File.dirname(__FILE__)), 'path/to/file')
    iş gibi görünüyor, ama garip görünümlü ve oldukça iyi değil.
  • Kullanım backports gem - rubygems ve sadece require isterken diğer çözümlerden ton içerir, altyapı göreceli dosyaları ile çalışma gerektirir, ama biraz ağır.

Biraz daha örnek verir closely related question at StackOverflow bir şey var, ama en iyi yöntem olan açık bir cevap vermiyor.

Benim uygulama&; 1.9.2 hem Ruby lt ve ^ üzerinde çalışmasını sağlamak için, kabul-Herkes herhangi bir iyi evrensel çözüm yoktur . =1.9.2?

GÜNCELLEME

Açıklama: "X aslında, zaten söz konusu kararların çoğu bahsetmiştim." - yapabilirsin gibi cevaplar istemiyorum İstiyorumgerekçeyaninedendiğerleri arasında artıları ve eksileri nelerdir ve seçilmelidir neden en iyi yöntem, bir.

CEVAP
17 Ocak 2011, PAZARTESİ


Bu geçici bir çözüm sadece 'bölüm' gem yani bu yazıya ilham olduğu gibi paylaşmak istedim. eklendi

https://github.com/appoxy/aws/blob/master/lib/awsbase/require_relative.rb

unless Kernel.respond_to?(:require_relative)
  module Kernel
    def require_relative(path)
      require File.join(File.dirname(caller[0]), path.to_str)
    end
  end
end

Bu ruby 1.8 ruby 1.9.2 ve 1.9.1 olarak require_relative kullanmak için izin verir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • echifitness

    echifitness

    9 Kasım 2008
  • MattSteffanina 2

    MattSteffani

    28 Kasım 2007
  • SDSARG3

    SDSARG3

    14 Mart 2009