..


Sponsrade länkar

Användning av mixins i Ruby

Artikel skriven av Alessio Saltarini
Sidan 1 av 2

Ibland vill du skapa en klass av objekt som har "denna" funktion, men också "denna" och "det andra", som kanske redan har skrivits på andra håll i vår källkod.

Med andra ord vill vi skapa en klass som lånar metoder och egenskaper som definieras i andra delar av källkoden eller i vissa bibliotek.

Omvänt skulle vi samlas kring samma funktioner vår källkod på en plats tillgänglig för alla. Hur?

Den purister förfasar objektorienterad programmering och support - enligt min mening inte helt utan anledning - att varje behov av denna typ kan lösas med en korrekt användning av polymorfism.

Andra, särskilt om de kommer från erfarenheter med språk som C + +, hävdar att just på grund av dessa krav med hjälp av flera arv.

Pragmatisk språk som Ruby, men ta itu med frågan genom att tillhandahålla en teknik som kallas "Mixin", namnet - det låter! - En glass mannen gav henne Massuchussets består av olika smaker glass (grädde, choklad ...)

Ruby mixins

Tekniskt sett är Ruby mixins genomförs med hjälp av klasserna, kod som avses i olika moduler (modul).

För att ta ett trivialt exempel, antar att jag ville genomföra en ordbehandlare som automatiskt skriver ut min vänlighet ett affärsbrev. Eftersom du bara ange de nödvändiga uppgifterna, dvs mottagaren och meddelandet. Programmet kommer att tänka olika vänliga som "sir" och "vänliga hälsningar".

Låt oss börja med att definiera i en vänlig form:






 modul CordialitaLettera



    



 def start (adress)



        



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



    



 slutet



    



 slutliga undertecknandet (brev)



        



 tillbaka bokstav + "\ n" + "Med vänliga hälsningar, \ nCarlo Smith"



    



 slutet







 slutet



Ingenting i synnerhet då, fick endast två metoder som kan ändra texten som indata.

Låt oss skriva en klass "blandad" med dessa metoder, bara en Mixin:






 Klass brev



    



 inkluderar CordialitaLettera



    



 slutgiltiga stampaLettera (mottagare, meddelande)



        



 = Startpunkten (mottagare)



        



 = Bokstav + inlägg



        



 sätter signatur (brev)



    



 slutet







 slutet



Brev ovanför klassen har en metod som tar som indata endast de rörliga delarna av skrivelsen, med vänligt format som anges i modulen.

Som du kan se syntaxen är ganska lik arv i Ruby, men till skillnad från den senare, kan i en klass implementera ett obegränsat antal former - och som är känd, kan en klass härledas från en och bara en förälder klass (Ruby stöder inte multipelt arv!)

Till exempel kan vi skriva:






 def main ()



    



 Lengin = Lettere.new



    



 lEngine.stampaLettera ('Alessio Saltarini "



                          



 Jag fortsatte bara att överföra



                           



 du har begärt. ")



    



 sätter



    



 lEngine.stampaLettera (Matteus Pisconi "



                          



 "Jag skickar faxet till nr.038283873. ')







 slutet



som returnerar:





 Kära sig.Alessio Saltarini,







 Jag har precis gjort en överföring du begärde.







 Med vänliga hälsningar,







 Carlo Rossi








 Kära sig.Matteo Pisconi,







 Jag skickar faxet till nr.038283873.







 Med vänliga hälsningar,







 Carlo Rossi



Denna teknik, bland annat gör att vi kan tillgodogöra användningen av mixins som gränssnitt i Java: Faktum är att om en klass är "blandning" med en form, i själva verket kommer att genomföra de metoder (och därför uppfyller ett visst gränssnitt) .

I samma kategori ...
E-Learning
Ruby och Ruby on Rails (kurs) Ruby och Ruby on Rails (kurs)
Skapa program och webbapplikationer med Ruby och RoR. Från 39 €.
Sponsrade länkar