window.pipedriveLeadboosterConfig = { bas: 'leadbooster-chat.pipedrive.com', företagId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = fönster if (w.LeadBooster) { console.warn('LeadBooster finns redan') } annars { w.LeadBooster = { q: [], on: funktion (n, h) { this.q.push({ t: "o", n: n, h: h }) }, trigger: funktion (n) { this.q.push({ t: 't', n: n }) }, } } })() Ruby 3.0. Ruby och mindre kända metoder för sekretesskontroll - The Codest
Codest
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Industrier
    • Fintech & bankverksamhet
    • E-commerce
    • Adtech
    • Hälsoteknik
    • Tillverkning
    • Logistik
    • Fordon
    • IOT
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
  • Om oss
  • Tjänster
    • Utveckling av programvara
      • Frontend-utveckling
      • Backend-utveckling
    • Staff Augmentation
      • Frontend-utvecklare
      • Backend-utvecklare
      • Dataingenjörer
      • Ingenjörer inom molntjänster
      • QA-ingenjörer
      • Övriga
    • Det rådgivande
      • Revision och rådgivning
  • Värde för
    • VD OCH KONCERNCHEF
    • CTO
    • Leveranschef
  • Vårt team
  • Fallstudier
  • Vet hur
    • Blogg
    • Möten
    • Webbinarier
    • Resurser
Karriär Ta kontakt med oss
Pil tillbaka GÅ TILLBAKA
2021-01-28
Utveckling av programvara

Ruby 3.0. Ruby och mindre kända metoder för sekretesskontroll

Codest

Tomasz Szkaradek

Utvecklingsarkitekt

En av de mest älskade funktionerna i Ruby är dess mycket flexibla syntax. Personligen älskar jag Ruby för hur många möjligheter vi har att definiera klasser och deras egenskaper, och det är vad jag kommer att diskutera i den här artikeln.

Grundläggande lösningar

Låt oss anta att vi använder klassen Foo som har en offentlig metod och en privat metod:

klass Foo
  def bar
    :fantastisk
  slut

  privat

  def baz
    :något_privat
  slut
slut

Allt är bra, vi ser en sådan lösning i praktiskt taget alla projekt. Löpande Foo.new.baz kommer att orsaka felet NoMethodError (privat metod 'baz' anropad för # ) och det var det vi menade att göra. Vad händer om vi försöker ändra sparformatet och lägga till private som ett prefix i klassdefinitionen?

klass Foo
  def bar
    :fantastisk
  slut

  privat def baz
    :något_privat
  slut
slut

Som du kan se efter att ha kört kod, det fungerar faktiskt! Varför kan vi ange metodens synlighet innan vi gör den? Därför att när man definierar en metod returnerar def namnet på metoden som en symbol. Detta uttryck är inte bara en del av syntaxen, utan de facto en metod som härrör från klassen Module och som behandlar denna symbol som ett argument. För mer information, se dokumentationen i denna länk. Eftersom det började så enkelt med private, låt oss försöka ändra synligheten för den privata metoden.

klass Foo
  def bar
    :fantastisk
  slut

  privat def baz
    :något_privat
  slut

  offentlig :baz
slut

Vad händer när du har kört koden?

irb(main):012:0> Foo.new.baz
=> :något_privat

Framgång! Vår metod för baser blev offentlig eftersom vi gjorde den synlig två gånger. Naturligtvis gäller samma operation för modulerna.
​
Bra, men vad får vi ut av det?
​
Denna funktionalitet ger oss mycket eftersom vi fritt kan ändra synligheten för en metod när vi definierar den, eller till och med ändra synligheten för metoder när vi ärver dem.

Låt oss nu ta en titt på vad Ruby 2.7 kan göra när det gäller att ändra synligheten för aliaser och accessorer.

klass Foo
  privat attr_accessor :awesome_variabel
slut

Tyvärr får vi ett fel eftersom den privata metoden förväntar sig symboler och attr_accessor. Koden returnerar nil och därmed är den här metoden inte kompatibel med den privata användningen i Ruby 2.7. Så vad är våra alternativ?

  1. Vi kan använda attr_accessor under nyckelordet private för att få det att fungera, dvs. vi kommer att få ett fel när vi vill hänvisa till awesome_variabelawesome_variabel metod.
klass Foo
  privat

  attr_accessor :awesome_variabel
slut
  1. Det andra alternativet är att exekvera den privata metoden på metoder som genereras av attr_attribut; i det här fallet måste vi också komma ihåg att ange settern där.
klass Foo
  attr_accessor :awesome_variabel

  privat :awesome_variabel, :awesome_variabel=
slut

Problem med Attr_ * metoder är inte de enda hindren. Vi kan stöta på samma problem när vi vill skapa ett privat alias.

klass Foo
  private alias :bar, :awesome_bar
slut

Ruby 3.0 och vår verksamhet

Lyckligtvis introducerar Ruby 3.0 en stor förändring eftersom synlighetsmetoderna kan ta matrisen som ett argument och metodernas alias, attr_ *, kan återställa matrisen med namnen på de metoder som har definierats. Du kan läsa mer här.

Låt oss nu se några exempel i den senaste euba och kontrollera om ändringarna faktiskt har gjorts och hur vi kan använda dem.
​
I det första exemplet använder vi private före accessorn attr:

klass Foo
  privat attr_accessor :awesome_variabel
slut

Ett sådant anrop kommer inte att orsaka fel vid tolkningen av syntaxen och, vilket är viktigt, fantastisk_variabel ochfantastisk_variabel =metoder blir privata.
​
Aliasmetoden gör samma sak, men nu returnerar den också en symbol som namn på den nya metoden och gör den synlig.

klass Foo
  private alias :bar, :awesome_bar
slut

Ett intressant faktum är att vi också kan fördjupa oss i ytterligare metoder, t.ex. den fantastiskautskriftsmodul kan anropas mellan private och attrläsare; det är viktigt att en sådan metod returnerar en array med namnen på de metoder som finns på höger sida av uttrycket.

klass Modul
  def awesome_print(namn)
    sätter namn
    namn
  slut
slut
klass Foo
  private awesome_print attr_reader :awesome_bar
slut 

Sammanfattning

Hoppas att du kommer att hitta den här artikeln användbar! I händelse av fler nyheter om Ruby 3.0. läs mer här.

Trevlig kodning!

Erbjudande för Ruby-utvecklare

Läs mer om detta:

Håll käften och ta dina pengar #1: Dolda kostnader och verklig smidighet i produktutvecklingsprocessen

CTO-utmaningar - uppskalning och tillväxt av mjukvaruprodukter

Relaterade artiklar

Utveckling av programvara

Bygg framtidssäkrade webbappar: Insikter från The Codest:s expertteam

Upptäck hur The Codest utmärker sig genom att skapa skalbara, interaktiva webbapplikationer med banbrytande teknik som ger sömlösa användarupplevelser på alla plattformar. Läs om hur vår expertis driver digital omvandling och affärsutveckling...

DEKODEST
Utveckling av programvara

Topp 10 Lettlandsbaserade mjukvaruutvecklingsföretag

Läs mer om Lettlands främsta mjukvaruutvecklingsföretag och deras innovativa lösningar i vår senaste artikel. Upptäck hur dessa teknikledare kan hjälpa till att lyfta ditt företag.

thecodest
Lösningar för företag och uppskalningsföretag

Java Software Development Essentials: En guide till framgångsrik outsourcing

Utforska denna viktiga guide om framgångsrik outsourcing av Java-programvaruutveckling för att förbättra effektiviteten, få tillgång till expertis och driva projektframgång med The Codest.

thecodest
Utveckling av programvara

Den ultimata guiden till outsourcing i Polen

Den kraftiga ökningen av outsourcing i Polen drivs av ekonomiska, utbildningsmässiga och tekniska framsteg, vilket främjar IT-tillväxt och ett företagsvänligt klimat.

TheCodest
Lösningar för företag och uppskalningsföretag

Den kompletta guiden till verktyg och tekniker för IT-revision

IT-revisioner säkerställer säkra, effektiva och kompatibla system. Läs mer om hur viktiga de är genom att läsa hela artikeln.

Codest
Jakub Jakubowicz CTO och medgrundare

Prenumerera på vår kunskapsbas och håll dig uppdaterad om expertisen från IT-sektorn.

    Om oss

    The Codest - Internationellt mjukvaruutvecklingsföretag med teknikhubbar i Polen.

    Förenade kungariket - Huvudkontor

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokala tekniknav

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      Codest

    • Hem
    • Om oss
    • Tjänster
    • Fallstudier
    • Vet hur
    • Karriär
    • Ordbok

      Tjänster

    • Det rådgivande
    • Utveckling av programvara
    • Backend-utveckling
    • Frontend-utveckling
    • Staff Augmentation
    • Backend-utvecklare
    • Ingenjörer inom molntjänster
    • Dataingenjörer
    • Övriga
    • QA-ingenjörer

      Resurser

    • Fakta och myter om att samarbeta med en extern partner för mjukvaruutveckling
    • Från USA till Europa: Varför väljer amerikanska startup-företag att flytta till Europa?
    • Jämförelse av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinerna), Eurasien (Turkiet)
    • Vilka är de största utmaningarna för CTO:er och CIO:er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Användarvillkor för webbplatsen

    Copyright © 2025 av The Codest. Alla rättigheter reserverade.

    sv_SESwedish
    en_USEnglish de_DEGerman da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch etEstonian elGreek sv_SESwedish