Previous Table of Contents Next
Förståelse av rubyvariabler Ruby Number Classes and Conversions

Köp och ladda ner de fullständiga PDF- och ePub-utgåvorna av den här e-boken om Ruby för endast 8 dollar.99

Nu när vi har behandlat grunderna för variabler i Ruby är nästa uppgift att förklara Ruby variable scope.

Innehåll

Vad är variabelns räckvidd?

Räckvidden definierar var i ett program en variabel är tillgänglig. Ruby har fyra typer av variabelomfång: lokalt, globalt, instans och klass. Dessutom har Ruby en konstanttyp. Varje variabeltyp deklareras genom att använda ett specialtecken i början av variabelnamnet enligt följande tabell.

.

Namnet börjar med Variabelomfång
$ En global variabel
En instansvariabel
eller _ En lokal variabel
En konstant
@@ En klassvariabel

Utsöver, Ruby har två pseudovariabler som inte kan tilldelas värden. Dessa är nil som tilldelas oinitierade variabler och self som hänvisar till det objekt som körs för tillfället. I resten av det här kapitlet kommer vi att titta på vart och ett av dessa variabelomfång i tur och ordning.

Ezoicrapportera den här annonsen

Detektera räckvidden för en Ruby-variabel

Oppenbarligen kan du avgöra räckvidden för en variabel genom att titta på namnet. Ibland behöver du dock ta reda på räckvidden programmatiskt. En användbar teknik för att ta reda på omfattningen av en variabel är att använda metoden defined?. defined? returnerar omfattningen av den variabel som det hänvisas till, eller nil om variabeln inte är definierad i den aktuella kontexten:

x = 10=> 10defined? x=> "local-variable"$x = 10=> 10defined? $x=> "global-variable"

Ruby Lokala Variabler

Lokala variabler är lokala för den kodkonstruktion i vilken de deklareras. En lokal variabel som deklareras i en metod eller inom en slinga kan till exempel inte nås utanför den slingan eller metoden. Namnen på lokala variabler måste börja med antingen ett understreck eller en liten bokstav. Till exempel:

loopcounter = 10_LoopCounter = 20

Ruby Globala variabler

Globala variabler i Ruby är åtkomliga från var som helst i Ruby-programmet, oavsett var de deklareras. Namnen på globala variabler föregås av ett dollartecken ($). Till exempel:

$welcome = "Welcome to Ruby Essentials"

Användning av globala variabler avråds starkt. Problemet med globala variabler är att de inte bara är synliga var som helst i koden för ett program, de kan också ändras var som helst i programmet. Detta kan göra det svårt att spåra fel.

Det är dock bra att veta att ett antal fördefinierade globala variabler är tillgängliga för dig som Ruby-utvecklare för att få information om Ruby-miljön. En kort sammanfattning av var och en av dessa variabler finns i följande tabell.

.

Variabelns namn Variabelns värde
Platsen för det senaste felet
$_ Strängen som senast lästes av gets
$. Linjenummer som senast lästes av tolken
$& Strängen som senast matchades av regexp
$~ Senaste matchningen av regexp, som en matris av deluttryck
$n Det nionde deluttrycket i den senaste matchningen (samma som $~)
$= Fall-
$/ Ingångspostseparatorn
$\ Utgångsposten Separator
Namnet på den rubyskriptfil som för närvarande körs
$* Den kommandoradsargument som används för att anropa skriptet
Rubintolkarens process-ID
$? Utgångsstatusen för den senast exekverade underprocessen

Till exempel kan vi exekvera gets-metoden för att ta emot indata från tangentbordet, och sedan referera till variabeln $_ för att hämta det inmatade värdet:

irb(main):005:0> getshello=> "hello\n"irb(main):006:0> $_=> "hello\n"

Alternativt kan vi hitta process-ID:

irb(main):007:0> $$=> 17403

Ruby Class Variables

En klassvariabel är en variabel som delas mellan alla instanser av en klass. Detta innebär att endast ett variabelvärde finns för alla objekt som instansieras från den här klassen. Detta innebär att om en objektinstans ändrar värdet på variabeln kommer det nya värdet i princip att ändras för alla andra objektinstanser.

Ett annat sätt att tänka på klassvariabler är som globala variabler inom ramen för en enskild klass.

Klassvariabler deklareras genom att variabelnamnet föregås av två @-tecken (@@). Klassvariabler måste initialiseras vid skapandet. Till exempel:

@@total = 0

Ruby Instansvariabler

Instansvariabler liknar klassvariabler förutom att deras värden är lokala för specifika instanser av ett objekt. Om en klass till exempel innehåller en instansvariabel som heter @total, om en instans av objektet ändrar det aktuella värdet av @total är ändringen lokal endast för det objekt som gjorde ändringen. Andra objekt i samma klass har sina egna lokala kopior av variabeln som är oberoende av ändringar som görs i andra objekt.

Instansvariabler deklareras i Ruby genom att variabelnamnet föregås av ett enkelt @-tecken:

@total = 10

Ruby Constant Scope

Ruby constants är värden som när de väl har tilldelats ett värde inte ska ändras. Jag säger bör eftersom Ruby skiljer sig från de flesta programmeringsspråk genom att det tillåter att ett konstantvärde ändras efter att det har deklarerats, även om tolken protesterar något med ett varningsmeddelande.

Konstanter som deklareras inom en klass eller modul är tillgängliga var som helst inom ramen för den klassen eller modulen. Konstanter som deklareras utanför en klass eller modul tilldelas global räckvidd.

Köp och ladda ner de fullständiga PDF- och ePub-utgåvorna av denna Ruby e-bok för endast 8 dollar.99

Previous Table of Contents Next
Förståelse av rubyvariabler Rubytalsklasser och omvandlingar

Lämna ett svar

Din e-postadress kommer inte publiceras.