Om herbruikbare componenten te maken, componenten die gemakkelijk in andere programma's kunnen worden gebruikt, moet een programmeertaal een manier hebben om die code tijdens runtime soepel te importeren. In Robijn, de vereisen methode wordt gebruikt om een ander bestand te laden en al zijn bestanden uit te voeren verklaringen. Dit dient om alle klassen en te importeren methode definities in het bestand. Naast het simpelweg uitvoeren van alle instructies in het bestand, houdt de vereiste methode ook bij welke bestanden eerder vereist waren en zal dus niet tweemaal een bestand nodig hebben.
Met behulp van de 'nodig'-methode
De vereiste methode heeft de naam van het bestand nodig, als een draad, als een enkel argument. Dit kan een pad zijn naar het bestand, zoals ./lib/some_library.rb of een verkorte naam, zoals een bibliotheek. Als het argument een pad is en de volledige bestandsnaam, zoekt de vereiste methode daar naar het bestand. Als het argument echter een verkorte naam is, zoekt de vereiste methode door een aantal vooraf gedefinieerde mappen op uw systeem naar dat bestand. Het gebruik van de verkorte naam is de meest gebruikelijke manier om de vereiste methode te gebruiken.
Het volgende voorbeeld laat zien hoe u de vereiste-instructie gebruikt. Het bestand test_bibliotheek.rb bevindt zich in het eerste codeblok. Dit bestand drukt een bericht af en definieert een nieuwe klasse. Het tweede codeblok is het bestand test_program.rb. Dit bestand laadt de test_bibliotheek.rb bestand met daarquiremethod en maakt een nieuwe TestClass voorwerp.
zet "test_library inbegrepen"
klasse TestClass
def initialiseren
zet "TestClass-object gemaakt"
einde
einde
#! / usr / bin / env robijn
'test_library.rb' vereisen
t = TestClass.new
Vermijd naamconflicten
Bij het schrijven van herbruikbare componenten, is het het beste om niet veel variabelen in het globale bereik te declareren buiten klassen of methoden of door de te gebruiken $ voorvoegsel. Dit is om te voorkomen dat iets genaamd "naamruimte vervuiling"Als u te veel namen declareert, kan een ander programma of bibliotheek dezelfde naam declareren en een naamclash veroorzaken. Wanneer twee volledig niet-verwante bibliotheken elkaars variabelen per ongeluk beginnen te veranderen, zullen de dingen breken - schijnbaar willekeurig. Dit is een erg moeilijke bug om op te sporen en het is het beste om het gewoon te vermijden.
Om naamclashes te voorkomen, kunt u alles in uw bibliotheek insluiten binnen een module uitspraak. Dit vereist dat mensen naar uw klassen en methode verwijzen met een volledig gekwalificeerde naam zoals MyLibrary:: my_method, maar het is het waard, omdat naamconflicten over het algemeen niet voorkomen. Voor mensen die al uw klasse- en methodenamen in de globale scope willen hebben, kunnen ze dat doen met de omvatten uitspraak.
Het volgende voorbeeld herhaalt het vorige voorbeeld, maar omsluit alles in een Mijn bibliotheek module. Twee versies van mijn_programma.rb zijn gegeven; een die de omvatten verklaring en een die dat niet doet.
zet "test_library inbegrepen"
module MyLibrary
klasse TestClass
def initialiseren
zet "TestClass-object gemaakt"
einde
einde
einde
#! / usr / bin / env robijn
'test_library2.rb' vereisen
t = MyLibrary:: TestClass.new
#! / usr / bin / env robijn
'test_library2.rb' vereisen
inclusief MyLibrary
t = TestClass.new
Vermijd absolute paden
Omdat herbruikbare componenten vaak worden verplaatst, is het ook het beste om geen absolute paden te gebruiken in uw vereiste oproepen. Een absoluut pad is een pad zoals /home/user/code/library.rb. U zult merken dat het bestand zich op die exacte locatie moet bevinden om te kunnen werken. Als het script ooit wordt verplaatst of uw homedirectory ooit verandert, werkt die vereiste verklaring niet meer.
In plaats van absolute paden, is het vaak gebruikelijk om een ./lib directory in de directory van uw Ruby-programma. De ./lib directory wordt toegevoegd aan de $ LOAD_PATH variabele die de mappen opslaat waarin de vereiste methode zoekt naar Ruby-bestanden. Daarna, als het bestand mijn_bibliotheek.rb is opgeslagen in de lib directory, kan het eenvoudig in uw programma worden geladen 'my_library' vereisen uitspraak.
Het volgende voorbeeld is hetzelfde als het vorige test_program.rb voorbeelden. Het gaat er echter van uit dat test_bibliotheek.rb bestand is opgeslagen in de ./lib directory en laadt het met de hierboven beschreven methode.
#! / usr / bin / env robijn
$ LOAD_PATH << './lib'
'test_library.rb' vereisen
t = TestClass.new