So I've tracked this down: __FILE__ is the name of the current source file $0 at the top level is the name of the top-level program being executed But I'm still confused as to what this if statement is accomplishing? It's obviously useful for something since it's used quite often. Does this pertain to when a script is called from another script? Thanks, PJ
on 2006-03-17 18:49
on 2006-03-17 18:55
Hi -- On Sat, 18 Mar 2006, PJ Hyett wrote: > So I've tracked this down: > __FILE__ is the name of the current source file > $0 at the top level is the name of the top-level program being executed > > But I'm still confused as to what this if statement is accomplishing? > It's obviously useful for something since it's used quite often. Does > this pertain to when a script is called from another script? Yes; if __FILE__ (the name of the current file) is the same as $0 (the file where execution started), then you're in the startup file. You'll often see this used in, say, a library file that usually gets loaded from another file (so __FILE__ == $0 is false), but can also be run standalone for the sake of running tests. David -- David A. Black (email@example.com) Ruby Power and Light, LLC (http://www.rubypowerandlight.com) "Ruby for Rails" chapters now available from Manning Early Access Program! http://www.manning.com/books/black
on 2006-03-17 18:58
On Mar 17, 2006, at 5:49 PM, PJ Hyett wrote: > PJ It is used when you want to run something when the file is executed directly. Some put tests in their code like this, I think this is bad form. Tests belong in a separate file. File a.rb --------- class Foo end if __FILE__ == $PROGRAM_NAME #  puts "Testing out class Foo" # ... end File b.rb --------- require 'a' puts "The if block in a.rb is not executed" __END__ $ruby a.rb Testing out class Foo $ruby b.rb The if block in a.rb is not executed  $PROGRAM_NAME is the less cryptic name for $0 -- Daniel
on 2006-03-17 19:08
On Mar 17, 2006, at 10:58 AM, Daniel H. wrote: > if __FILE__ == $PROGRAM_NAME #  >  $PROGRAM_NAME is the less cryptic name for $0 > Most definitely. I would like to see this changed in existing code. Being a long time Ruby user, I always used $0 until recently, Then I read some code by a new ruby user (whom I introduced to ruby). I never bothered to see if an alternative to $0 existed. You can learn from anyone. Even the nubies. :) Jim F.
on 2006-03-17 20:09
Thanks guys, that's helpful. -PJ
on 2014-02-06 13:04
I agree with Jim F. - I think if __FILE__ == $PROGRAM_NAME is slightly more readable than if __FILE__ == $0 Elegance is what keeps me attached to ruby.