🙆
[Bug #20920] load 'foo.rb' した時の __FILE__ の値の話
[Bug #20920] When loading a file, FILE gets relative paths expanded only when they start with "./"
- 次のように
load
するときに./
がついているかどうかが__FILE__
に影響がある話
$ cat foo.rb
puts __FILE__
foo.rb
$ ruby ./foo.rb
./foo.rb
$ ruby -e 'load "foo.rb"'
foo.rb
$ ruby -e 'load "./foo.rb"'
/full/path/to/foo.rb
-
__FILE__
は現在のソースファイル名を返す疑似変数ですね- https://docs.ruby-lang.org/ja/latest/doc/spec=2fvariables.html#pseudo
- 明示的に full path を取得する場合は
File.expand_path(__FILE__)
を利用する必要がある
-
load
する時に./
がついていると full path で展開するんですね、へえー - これなんですが
load "foo.rb"
のみ full path に変更することが matz から提案されているみたいですね
$ ruby foo.rb
foo.rb # 現状維持
$ ruby ./foo.rb
./foo.rb # 現状維持
$ ruby -e 'load "foo.rb"'
foo.rb # これを full path に変更する
$ ruby -e 'load "./foo.rb"'
/full/path/to/foo.rb # 現状維持
Discussion