Operatör för omfattningsupplösning

Inom datorprogrammering är scope ett omslutande sammanhang där värden och uttryck associeras . Operatören för scope resolution hjälper till att identifiera och specificera det sammanhang som en identifierare refererar till, särskilt genom att ange ett namnområde . De specifika användningarna varierar mellan olika programmeringsspråk med begreppen omfattning. På många språk är scope resolution-operatorn skriven :: .

I vissa språk, särskilt de som påverkas av Modula-3 (inklusive Python och Go ), är moduler objekt och omfångsupplösning inom moduler är ett specialfall av vanlig objektmedlemsåtkomst, så den vanliga metodoperatorn . används för scope resolution. Andra språk, särskilt C++ och Ruby , har både scope-upplösning och metodåtkomst, som interagerar på olika sätt; se exempel nedan.

C++

  

       


  
       
 

    
     klass  A  {  public  :  static  int  i  ;  // omfattning av A  };  namnutrymme  B  {  int  c  =  2  ;  }  // namnområde B  int  A  ::  i  =  4  ;  // scope operator refererar till heltal i som deklarerats i klassen A  int  x  =  B  ::  c  ;  // scope operator hänvisar till heltal c som deklareras i namnrymden B 

PHP

I PHP kallas scope resolution operatorn också Paamayim Nekudotayim ( hebreiska : פעמיים נקודותיים , uttalas [paʔaˈmajim nekudoˈtajim] , det andra ordet en vardagsförvanskning av סטיim, uttalas [nekudaˈtajim] ), vilket betyder "dubbelt kolon " på hebreiska.

Namnet "Paamayim Nekudotayim" introducerades i den israeliskt utvecklade Zend Engine 0.5 som används i PHP 3 . Även om det har varit förvirrande för många utvecklare som inte talar hebreiska, används det fortfarande i PHP 7, som i detta exempel på felmeddelande:

 $  php -r ::  Analysfel: syntaxfel, oväntat T_PAAMAYIM_NEKUDOTAYIM 

Ett liknande fel kan också uppstå där ingen operatör för omfattningsupplösning finns. Ett försök att kontrollera om en konstant är tom() utlöser till exempel detta fel:


 $  php -r  'define("foo", "bar"); if (empty(foo)) eko "tom";'   Analysfel: syntaxfel, oväntat ')', väntar T_PAAMAYIM_NEKUDOTAYIM 

Från och med PHP 5.4 innehåller felmeddelanden om scope resolution operator fortfarande detta namn, men har förtydligat dess betydelse något:

 $  php -r ::  Analysfel: syntaxfel, oväntat '::' (T_PAAMAYIM_NEKUDOTAYIM) 

Det finns andra mindre uppenbara sätt att utlösa felet, till exempel genom att försöka använda följande ogiltiga PHP-uttryck:


 $  php -r static const  '$a=1'  Analysfel: syntaxfel, oväntat filslut, väntar :: (T_PAAMAYIM_NEKUDOTAYIM) 

Rubin

I Ruby kan scope-upplösning specificeras med hjälp av modulens nyckelord .

 
    0

     
       
      
    
  
 

 
  

 
 






 modul  Exempelversion  =  1  .  _  class  <<  self  # Vi kommer åt modulens singleton class  def  hello  (  who  =  "world"  )  "Hello  #{  who  }  "  end  end  end  #/Exempel Exempel  ::  hello  #  => "Hello world"  Exempel  .  hej  "hacker"  # => "Hej hackare"  Exempel  ::  Version  # => 1.0  Exempel  .  Version  # NoMethodError  # Detta illustrerar skillnaden mellan meddelandeoperatorn (.) och scope-operatorn i Ruby (::) #  Vi kan använda både ::hej och .hello, eftersom hej är en del av exempels omfattning och eftersom exempel  # svarar till meddelandet hej.  #  # Vi kan inte göra detsamma med ::Version och .Version, eftersom Version är inom ramen för Exempel, men #  Exempel kan inte svara på meddelandet Version, eftersom det inte finns någon metod att svara med. 

Omfattning påverkas också av sigils som föregår variabelnamn:

externa länkar