..


Sponsorerede links

Brug af mixins i Ruby

Artikel skrevet af Alessio Saltarini
Side 1 af 2

Sommetider du vil oprette en klasse af objekter, der har "denne" funktion, men også "dette" og "det andet", som måske allerede er blevet skrevet andre steder i vores kildekode.

Med andre ord ønsker vi at skabe en klasse, der låner metoder og egenskaber er defineret i andre dele af kildekoden eller på biblioteket.

Omvendt ville vi samles om de samme funktioner vores kildekode på ét sted tilgængeligt for alle. Hvordan?

De purister er forfærdede objektorienteret programmering og support - efter min mening ikke helt uden grund - at enhver brug af denne type kan løses med den rette brug af polymorfi.

Andre, især hvis de kommer fra erfaring med sprog som C + +, hævder, at netop på grund af disse krav ved hjælp af flere arv.

Pragmatiske sprog som Ruby, dog behandle spørgsmålet ved at give en teknik kaldet "mixin", navnet - det lyder! - En is mand gav hende Massuchussets sammensat af forskellige istyper (fløde, chokolade ...)

The Ruby mixins

Teknisk set er Ruby mixins implementeres ved hjælp inden for klasser, kode defineret i forskellige moduler (modul).

For at tage et trivielt eksempel, hvis jeg ønskede at gennemføre et tekstbehandlingsprogram, der automatisk udskrive min venlighed af en virksomhed brev. Da du ønsker at indtaste kun de nødvendige data, dvs modtageren og budskabet. Programmet vil tænke de forskellige venlige lignende, "Sir" og "Med venlig hilsen."

Lad os starte med at definere i en venlig form:






 modul CordialitaLettera



    



 def start (adresse)



        



 return "Dear Mr.." + modtager + "\ n"



    



 ende



    



 endelige underskrift (brev)



        



 tilbage bogstav + "\ n" + "Med venlig hilsen, \ nCarlo Smith"



    



 ende







 ende



Intet i særdeleshed, da kun to metoder, der kan ændre den tekst, der modtages som input.

Lad os skrive en klasse "blandet" til disse metoder, kun en mixin:






 Klasse Breve



    



 omfatter CordialitaLettera



    



 endelige stampaLettera (modtager, besked)



        



 = Startpunktet (modtager)



        



 = Bogstav + indlæg



        



 sætter underskrift (brev)



    



 ende







 ende



Breve over klassen har en metode, der tager som input kun de variable dele af brevet, med venlig format, der er defineret i modulet.

Som du kan se syntaksen er meget lig arv i Ruby, men i modsætning til sidstnævnte, kan i en klasse gennemføre et vilkårligt antal af formularer - og som er kendt, kan en klasse være afledt af en og kun én forælder klasse (Ruby understøtter ikke multipel arv!)

For eksempel kan vi skrive:






 def main ()



    



 Lengin = Lettere.new



    



 lEngine.stampaLettera ('Alessio Saltarini',



                          



 "Jeg bare fortsatte med at overføre



                           



 du har bedt om. ')



    



 sætter



    



 lEngine.stampaLettera ('Matthew Pisconi',



                          



 "Jeg sender faxen til nr.038283873. ')







 ende



som returnerer:





 Kære sig.Alessio Saltarini,







 Jeg har lige gjort overførslen du anmodede om.







 Med venlig hilsen







 Carlo Rossi








 Kære sig.Matteo Pisconi,







 Jeg sender faxen til nr.038283873.







 Med venlig hilsen







 Carlo Rossi



Denne teknik, blandt andet giver os mulighed for at assimilere brugen af ​​mixins, der af interfaces i Java: i virkeligheden, hvis en klasse er "blande" med en form i virkeligheden vil gennemføre de metoder (og dermed opfylder et bestemt interface) .

I den samme kategori ...
E-Learning
Ruby og Ruby on Rails (Kursus) Ruby og Ruby on Rails (Kursus)
Opret software og web-applikationer med Ruby og RoR. Fra 39 €.
Sponsorerede links