Wciąż widzę słowo kluczowe „moje” przed nazwami zmiennych w przykładowych skryptach Perla online, ale nie mam pojęcia, co to znaczy. Próbowałem czytać strony podręcznika i inne witryny w Internecie, ale mam trudności ze zrozumieniem, do czego służy, biorąc pod uwagę różnicę między tym, jak widzę jego użycie, a instrukcją.
Na przykład służy do pobierania długości tablicy w tym poście: Znajdź rozmiar tablicy w Perlu
Ale instrukcja mówi:
A my deklaruje wymienione zmienne jako lokalne (leksykalnie) do otaczającego bloku, pliku lub eval. Jeśli wymieniona jest więcej niż jedna wartość, listę należy umieścić w nawiasach.
Do czego służy i do czego służy?
perl
scope
declaration
Pięść furii
źródło
źródło
my
w najmniejszym stopniu nie uwzględniał tego. Jest to operator przypisania skalarnego (=
), który wymusił kontekst skalarny@arr
.Odpowiedzi:
my
ogranicza zakres zmiennej. Zakres zmiennej to miejsce, w którym można ją zobaczyć. Ograniczenie zakresu zmiennej do miejsca, w którym jest ona potrzebna, jest podstawowym aspektem dobrego programowania. Sprawia, że kod jest bardziej czytelny i mniej podatny na błędy, a także daje mnóstwo pochodnych korzyści.Jeśli nie zadeklarujesz zmiennej za pomocą
my
, zostanie utworzona zmienna globalna. Należy tego unikać. Użycieuse strict;
mówi Perlowi, że nie chcesz, aby niejawnie tworzył zmienne globalne, dlatego zawsze powinieneś używaćuse strict;
(iuse warnings;
) w swoich programach.Powiązana lektura: Dlaczego warto używać
use strict;
iuse warnings;
?źródło
var
iwlet
JavaScript. Bez'use strict';
JS możesz zadeklarować nowe zmienne globalne bez żadnego ze słów kluczowych, co nie jest uważane za najlepsze praktyki.let
ivar
robi i jak powinno się ich używać?” I tak, odpowiedź byłaby mniej więcej taka sama. (Warary JSlet
są bardzo podobne domy
zmiennych Perla , z tym wyjątkiem, żelet
zmiennych nie można przechwycić.)use strict;
? Ale to nie było pytanie, ause strict;
robi coś więcej. A może miałeś na myśli komunikację, któramy
ogranicza zakres vars, które lubiąlet
ivar
robią, ale to jest prawie pierwsze zdanie odpowiedzi. 3) Jeśli chcesz inaczej odpowiedzieć na pytanie, do tego służą odpowiedzi.Szybkie podsumowanie:
my
tworzy nową zmienną,local
tymczasowo zmienia wartość zmiennejW poniższym przykładzie $ :: a odnosi się do $ a w „globalnej” przestrzeni nazw.
$a = 3.14159; { my $a = 3; print "In block, \$a = $a\n"; print "In block, \$::a = $::a\n"; } print "Outside block, \$a = $a\n"; print "Outside block, \$::a = $::a\n"; # This outputs In block, $a = 3 In block, $::a = 3.14159 Outside block, $a = 3.14159 Outside block, $::a = 3.14159
tj.
local
tymczasowo zmienia wartość zmiennej, ale tylko w zakresie, w jakim istnieje.Źródło: http://www.perlmonks.org/?node_id=94007
Aktualizacja
O różnicy między
our
imy
proszę zobaczyć(Dzięki ThisSuitIsBlackNot ).
źródło
their
?our
: stackoverflow.com/questions/845060/…Zmienne prywatne za pośrednictwem my () to podstawowa dokumentacja dla
my
.We wspomnianym przykładzie rozmiaru tablicy nie jest używany do znalezienia rozmiaru tablicy. Służy do tworzenia nowej zmiennej do przechowywania rozmiaru tablicy.
źródło