Když napíšeme skript, a ten chceme používat jednak jako program a pak jako knihovnu, potřebujeme mechanizmus jak zajistit odlišné chování v obou případech. Při načtení jako knihovny jiným skriptem příkazem require 'moje_knihovna'
potřebujeme aby se nevykonával žádný kód, a naopak při přímém spuštění
$
./moje_knihovna
potřebujeme kód vykonat. Takto odlišné chování v obou případech zajistíme touto konstrukcí přidanou na konec souboru
A k čemu že je to dobré? Například je náš velký program rozdělen do řady menších souborů. V každém jsou související metody a třídy. Při spuštění programu se jednotlivé soubory jen načítají, zatímco když spustíme každy soubor samostatně, provedou se testy funkčnosti v něm naprogramované.
Více v testování, konkrétně „Primitivní testy“.
Máme-li soubor s definicí nějakých objektů, který používáme jako knihovnu, potřebujeme do něj někdy umístnit výkonný kód. Jde o to, že se soubor chová jinak když jej nahráváme pomocí require 'soubor.rb'
z jiného souboru a jinak když jej přímo spustíme
$ ./soubor.rb
Toto odlišné chování zajistíme přidáním kódu s podmínkou na konce souboru. Vypadá to nějak takto
if $0 == __FILE__ # kód který se provede, například spuštění testovací metody test end
Úplný spustitelný příklad
#!/usr/bin/env ruby # $Id: hello-arun.rb,v 1.1 2002/10/06 09:23:58 radek Exp $ # $Source: /home/radek/cvs/ruby-book/example/misc/hello-arun.rb,v $ def hello puts "Hello, world." end if $0 == __FILE__ hello end