$0 と __FILE__ の違いについて調べてみた。
gemとかの require
されるファイル側でどこから呼ばれてるのか知りたかったので調べてみた。
caller
メソッドとかで特定もできなくはなさそうだったけど、 $0
のほうが一般的っぽかった。
$0
とよくgemとかで見かける __FILE__
って何が違うのか調べてみた。
ざっくり言うと
$0
は実行されているファイル自身__FILE__
は__FILE__
が記述されているファイル自身
たぶん意味がよくわからないと思うので検証に使ったファイルが下記。
# yobu.rb require './yobareru' require './dir/yobareru2' class Yobu include Yobareru include Yobareru2 def oi puts 'oi' hello hello2 end end Yobu.new.oi
# yobareru.rb module Yobareru def hello puts 'hello' puts "FILE: #{__FILE__}" puts File.dirname(__FILE__) puts "$0: #{$0}" puts File.dirname($0) end module_function :hello end
# dir/yobareru2.rb module Yobareru2 def hello2 puts 'hello' puts "FILE: #{__FILE__}" puts File.dirname(__FILE__) puts "$0: #{$0}" puts File.dirname($0) end module_function :hello2 end
実行結果が下記
# $ ruby yobu.rb oi hello FILE: /home/vagrant/workspace/ruby/junk/yobareru.rb /home/vagrant/workspace/ruby/junk $0: yobu.rb . hello FILE: /home/vagrant/workspace/ruby/junk/dir/yobareru2.rb /home/vagrant/workspace/ruby/junk/dir $0: yobu.rb .
まとめ
$0
と __FILE__
の違いわかってよかった。
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2013/06/04
- メディア: 単行本
- この商品を含むブログ (23件) を見る