__FILE__ και $0 στη ruby

Τεχνική τεκμηρίωση
03/09/2009

Πιθανώς να έχετε δει σε κώδικα ruby κάτι σαν το ακόλουθο:

#ruby
if __FILE__ == $0
    #κάνε κάτι
end

Τι είναι λοιπόν

__FILE__
και $0 στη ruby;

Ας υποθέσουμε ότι έχουμε ένα αρχείο toarxeiomoy.rb που περιέχει τον ακόλουθο κώδικα:

#############toarxeiomoy.rb ###############
if __FILE__ == $0
    print "$0 και __FILE είναι #{$0}" 
else
    print "$0 είναι #{$0} \n __FILE__ είναι #{ __FILE__ }" 
end

Αν εκτελέσουμε το αρχείο από την γραμμή εντολών του Windows ή *NIX συστήματος :

C:\> ruby toarxeiomoy.rb
$0 και __FILE__ είναι toarxeiomoy.rb

Επομένως και FILE και $0 έχουν ως τιμή την συμβολοσειρά του ονόματος του αρχείου που εκτέλεσα.

Θα φτιάξω ένα δεύτερο αρχείο ονόματι alloarxeio1.rb που το μόνο που θα κάνει είναι να καλεί το toarxeiomoy.rb

############alloarxeio1.rb########################
require 'toarxeiomoy.rb'

Εκτελέστε alloarxeio1.rb από τη γραμμή εντολών :

C:\> ruby alloarxeio1.rb
$0 είναι alloarxeio1.rb
__FILE__ είναι toarxeiomoy.rb

Επομένως

__FILE__
είναι το όνομα του αρχείου ruby όπου εκτελείται ο κώδικας τη συγκεκριμένη στιγμή, ενώ η μεταβλητή $0 αναφέρεται πάντα στο όνομα του script από το οποίο ξεκίνησε το πρόγραμμα. Αν φτιάξετε ένα τρίτο αρχείο alloarxeio2.rb που καλεί το alloarxeio1.rb τότε η μεταβλητή $0 θα είναι alloarxeio2.rb .

Αν έχετε ασχοληθεί με python είναι ακριβώς αντίστοιχο του

#python
if __name__ == '__main__':
    #κάνε κάτι

Η χρησιμότητα της τακτικής αυτής είναι ότι μπορούμε να ορίσουμε διαφορετική λειτουργία σε ένα πρόγραμμα αν εκτελείται άμεσα και διαφορετική αν καλείται μέσω άλλου αρχείου.

Β.Τ.

Files