require File.expand_path(..., __FILE__)
はプロジェクト内の他のファイルを要求する最も良い方法ですか?File.expand_path(...、__FILE__)がベストプラクティスである必要がありますか?
答えて
Ruby 1.9.2 + require_relative
では、おそらくもっと正しい方法です。
require
は、セキュリティ上の理由から'.'
ディレクトリを含まないように変更されました。 require_relative
が追加され、呼び出しスクリプトのパスに関連するモジュール用のローカルファイル解決策が提供されました。
search here on StackOverflow、特に「What is require_relative in Ruby?」とインターネットでは、使用法を見つけることができます。why-for messagesは、その仕組みを説明しています。
また、「[Ruby:require vs require_relative - 両方のRubyで動作する回避策のベストプラクティス<1.9.2 and > = 1.9.2](http://stackoverflow.com/questions/4333286/ruby-require-vs-require-relative-best-practice-to-workaround-running-in -both)」はこれを説明する大きな糸です。 –
$LOAD_PATH
を変更しない限り、同じディレクトリ構造からの読み込みを続けるとよいでしょう。そうしないと、このようなことが起こります。
私はそれをやってに撮影した道、物事は、できるだけクロスプラットフォームとしてであることを確認するためには、このです:
require File.expand_path(File.join(*%w[ ... ]), File.dirname(__FILE__))
それは少し冗長だが、それは可能な最短パスとその結果ほとんどの場合、最小限の文法量が必要です。
より具体的な例は次のようになります。
require File.expand_path(File.join(*%w[ .. lib example ]), File.dirname(__FILE__))
あなたはたくさんのファイルを読み込む場合、物事を単純化するために$LOAD_PATH
に変更と組み合わせると、これを行うことができます。
$LOAD_PATH << File.expand_path(File.join(*%w[ .. lib ]), File.dirname(__FILE__))
require 'example'
コアにrequire_relative
がないRuby 1.8.xでは、File.expand_path(...,__FILE__)
は動作しません。
とします。__FILE__ == "/home/yourname/foo.rb"
とします。 File.expand_path("bar.rb",__FILE__)
は"/home/yourname/foo.rb/bar.rb
となります。何をしたい
はあなたにもbackports gemからrequire_relative
を得ることができる"/home/yourname/bar.rb"
を返しFile.expand_path("bar.rb",File.dirname(__FILE__))
です。
foo.rbのbaz.rbを同じディレクトリに含めるには、常に 'require File.expand_path(" ../ baz.rb "、__FILE __)'を実行することができます。 –
Mattのコメントに続いて、 'File.expand_path(" ../../lib/mygem.rb "、__FILE __)'は 'expand_path'の2.1.0文書で与えられた実際の例です。しかし、それはディレクトリ以外のディレクトリがディレクトリであると思われ、その想定された親に移動します!私は公式の文書がそのような逸脱したアプローチを推奨しているとうんざりしており、将来のバージョンで動作を変更する可能性のある実装の脆弱な副作用によってのみ機能するのだろうかと思います。私は 'dirname'のアプローチがもっときれいだと思います。 –
ルビー2.0ではKernel#__dir__
- 1. ルビーが対 './blahblah.rb' を必要とFile.expand_path( '../ blahblah'、__FILE__)を必要と
- 2. jqueryタブがdocument.ready内にある必要がありますか?
- 3. $ :. unshift(File.expand_path( "../../ lib"、__FILE__))は正確に何をしますか?
- 4. ベストプラクティス:双方向関係を回避する必要がありますか?
- 5. 私のIBackingStoreはスレッドセーフである必要がありますか?
- 6. PRNGはスレッドセーフである必要がありますか?
- 7. 移動コンストラクタはnoexceptである必要がありますか?
- 8. Struct.Error、Bytesオブジェクトである必要がありますか?
- 9. メインアクティビティ名は.MainActivityである必要がありますか?
- 10. OpenGLである必要がありますか?
- 11. MongoCollection.forEachはスレッドセーフである必要がありますか?
- 12. バックボーンモデルIDは数値である必要がありますか?
- 13. JButtonがJPanel上にある必要があります。
- 14. allow_url_openがある必要があります
- 15. InvalidOperationException Nullableオブジェクトには値がある必要があります
- 16. UIScrollviewはビュー上にある必要がありますか?
- 17. jsRender、データはJSONにある必要がありますか?
- 18. 大きなXMLファイルを解析する必要があります。ベストプラクティス?
- 19. 値エラー: "DoctorPerHospital.doc_id"は "DoctorUserProfile"インスタンスである必要があります
- 20. C#LINQターゲットは静的である必要があります
- 21. graphQL - タイプは出力タイプである必要があります
- 22. wpfスレッド、スレッドはSTAである必要があります
- 23. エラー:データベースの所有者である必要があります
- 24. ベクトル要素は移動可能である必要がありますか?
- 25. Salesforce REST APIのコールバックURLがHTTPSである必要がありますか?
- 26. db_insertをデバッグする必要がありますが、エラーはありません
- 27. SCO6でgcc/g ++が動作する必要があります
- 28. phpがLinuxサーバで機能する必要があります
- 29. web.configでhttpsを宣言する必要がありますか?
- 30. ビューでモデルデータを設定する必要がありますか?
可能ならばこれを使うことができます。それは私が私がなしでできることを望むものです。 –
可能な複製http://stackoverflow.com/questions/224379/what-does-file-mean-in-ruby –
可能な複製[Ruby:必要な\ _relative - ベストプラクティスを両方のRubyで実行するには<1.9.2 and > = 1.9.2](http://stackoverflow.com/questions/4333286/ruby-require-vs-require-relative-best-practice-to-workaround-running-in-both) –