Scala implisitt

Scala implisitt
“Alle som lærer eller tar i bruk skala -dataspråket til slutt møter den implisitt identifikatoren. Relativt få tar seg imidlertid tid til å forstå betydningen av den. Denne guiden vil derfor analysere semantikk og hovedbruk av den implisitte funksjonen. Implisitt fungerer i hovedsak som en "kompilator for implikasjoner.”Hvis en type“ t ”implisitt verdi eksisterer, kan vi bekrefte den. Kompilatoren vil varsle oss om situasjonen hvis det ikke er en implisitt verdi av type "t" tilgjengelig i omfanget. Dette er et nyttig alternativ som vi må avgjøre om en bestemt type verdi er tilgjengelig i implisitt omfang.”

Syntaks av implisitt nøkkelord i Scala i Ubuntu 20.04

For å konstruere eksplisitte, konkrete eksempler på tilgjengelighet av typer, er en bruksmetode inkludert i Scala Standard Library. I tillegg er implisitt navnet på metoden. Merk at Scala versjon 2.8 Introduserer implisitt, som er beskrevet i PRIDEF som:

def implisitt [t] (implisitt e: t) = e

Eksempel 1: Program for implisitt søkeordskala i Ubuntu 20.04

Her er en kort illustrasjon fra Retronymes presentasjon:

Til Scala Repl -modus har vi kalt variabelen “X” med et implisitt nøkkelord og initialisert den med strengen. Vi har spesifisert en implisitt verdi av den skrevne strengen. Typen returneres når kodelinjen utføres. Etter det søkte vi etter den typede strengen implisitt verdi ved å passere den i den implisitte funksjonen og deretter tilordne den til "y" -variabelen. Kompilatoren returnerte verdien av strengen “Demo” da den lagret denne verdien. Deretter fant vi den implisitte verdien av "int" -typen og satte den inne i variabelen "z". Ved sammenstilling genererer den en feil "kunne ikke finne den implisitte verdien for INT -parameteren".

Eksempel 2: Program for å forstå og løse et problem med implisitte synspunkter i Scala i Ubuntu 20.04

Når et utvalgs prefiks (for eksempel.prefiks.utvalg (ARGS) har ikke et valg av medlemmer som gjelder Args) er tomt, kan et implisitt syn utløses (selv etter å ha forsøkt å konvertere argumentene ved å bruke de implisitte visningene). Når dette skjer, ser kompilatoren etter implisitte medlemmer som enten ligner implisitte metoder eller funksjoner fra en type med et utvalg som er erklært, lokalt angitt i gjeldende eller omfang som er vedlagt, arvet eller importert.

Her har vi passert verdien “3” inne i 1.min () som "int" har ingen definisjon av min. Resultatet Int -typen genererer verdien “1”. Deretter har vi brukt nøkkelordet implisitt til Int, som har mindefinisjonen. Det returnerte den implisitte typen “int” som . Etter det har vi utført RES2 (1), som vil lokalisere den implisitte verdien som er til stede i AnyRef -definisjonen. Til slutt brukte vi .GetClass -metoden, som returnerte Scala.Runtime.Richint -klasse.

Videre, når et uttrykk avviker fra den forventede typen, kan implisitte visninger utløses, som vist nedenfor:

Vi har tildelt Scala.Runtime.Richint uttalelse til verdien “1” som ved utførelse ga den implisitte verdien “1”

Denne funksjonen er påkrevd av kompilatoren i dette tilfellet:

Scala.Runtime.Richint blir deretter tildelt Int -typen inne i den implisitt funksjonen, og den gir AS -utgangen.

Eksempel nr. 3: Program for å få tilgang til en kontekstindusert implisitt parameter skala i Ubuntu 20.04

Scalas implisitte parametere kan til og med være mer betydningsfulle enn implisitte synspunkter. De er typeklassemønster-kompatible. Dette brukes sporadisk i standardbiblioteket; Se Scala hvordan ordren er ansatt i seqlignende#sortert. Array -manifesterer og canbuildfrom -objekter blir også bestått ved hjelp av implisitte parametere.

Kontekstgrenser er en snarveissyntaks som Scala 2.8 Tilbud for implisitte argumenter. I et nøtteskall, en metode som krever en implisitt innspill av type y [x]

Den implisitte parameteren sendes, men den er ikke navngitt. Når du bruker metoden Foo, kan dette nøyaktig være nyttig? Det er vanlig at den implisitte parameteren blir sendt gjennom som en implisitt parameter til en annen funksjon som kalles i stedet for å måtte nevnes eksplisitt. For å materialisere verdien, kan du ringe implisitt mens du holder den konsise metodedefinisjonen med konteksten bundet.

Eksempel 4: Program for å gi eksplisitt innspill til en del av implisitte parametere Scala i Ubuntu 20.04

Tenk på følgende scenario når du bruker en type klassebasert tilnærming og påkaller en metode som pent skriver ut en studentdetalj:

Vi har definert Scala -egenskapen "Display" som har definisjonen av skjermen da den tar typen "T" og tildeler verdien “1” til den. Deretter har vi opprettet objektet “Display” der de implisitte funksjonene er etablert. Den første implisitte funksjonen er erklært som "intdisplay" som har "int" -definisjonen. Denne funksjonen er angitt med det nye nøkkelordet for displayet [int], som vil returnere strengrepresentasjonen.

Deretter etablerte vi en annen implisitt funksjon som "StringDisplay" for strengdefinisjonen. Deretter har vi funksjonen "MyStringDisplay" som har touppercase for konvertering til overlege. Etter det konstruerte vi saksklassen “Student” og satte dets attributter “Navn” med datatypen “String” og “Age” med typen “Int”.

Vi har implementert objektet "Student", innenfor den implisitte "studentdisplay" -funksjonen er definert. Funksjonen har tildelt to variabler, “DI” for visning av heltall og “DS” for visning av streng. Denne implisitte funksjonen har en nestet funksjon “Display” som skaper objektet “S” for “Student” -klassen. DS.displayet tar inngangen “S.Navn ”og DI.displayet tar “S.Alder ”-parameter. Til slutt setter variabelen “S” verdiene til attributtene “Navn” og “Age” for klasse “Student”. Med den implisitte funksjonen har vi vist "student" -verdiene.

Scala Repl Res6 viste resultatene av de implisitte verdiene til klasse "student" som følger:

Hva som skjer hvis vi ønsker å endre hvordan navnet er utfallet? Selv om vi direkte kan bruke StudentDisplay og levere en annen skjerm [streng], foretrekker vi å få kompilatoren til å passere skjermen [int].

Følgende resultater oppnås hvis vi bruker ovennevnte linje i foregående kode.

Konklusjon

I dette innlegget diskuterte vi den implisitte funksjonen, som har vært en del av Scala siden versjon 2.8. Først begynte vi å demonstrere funksjonens grunnleggende rolle som en "kompilator for implisitt". Denne implisitt metoden forventer bare en typeparameter, lokaliserer den implisitte verdien som er til stede i omfang, tilkaller den og gir den tilbake til oss. Den ekstremt grunnleggende teknikken bør brukes implisitt av følgende grunner.