Viac na
Zistenie veľkosti poľa v jazyku Perl
Zdá sa mi, že som narazil na niekoľko rôznych spôsobov, ako zistiť veľkosť poľa. Aký je rozdiel medzi týmito tromi metódami?
my @arr = (2);
print scalar @arr; # First way to print array size
print $#arr; # Second way to print array size
my $arrSize = @arr;
print $arrSize; # Third way to print array size
235
3
Prvý a tretí spôsob sú rovnaké: vyhodnocujú pole v skalárnom kontexte. Považoval by som to za štandardný spôsob, ako získať veľkosť poľa.
Druhý spôsob v skutočnosti vracia posledný index poľa, ktorý (zvyčajne) nie je rovnaký ako veľkosť poľa.
Po prvé, druhá možnosť nie je rovnocenná s ostatnými dvoma.
$#array
vracia posledný index poľa, ktorý je o jeden menší ako veľkosť poľa.Ostatné dva sú prakticky rovnaké. Jednoducho používate dva rôzne prostriedky na vytvorenie skalárneho kontextu. Ide o otázku čitateľnosti.
Ja osobne uprednostňujem nasledovné:
Zdá sa mi to jasnejšie ako
a
Samotný kód vyzerá celkom jasne, ale zdá sa mi, že dodatočný riadok znižuje prehľadnosť, keď je súčasťou iného kódu. Je'užitočný na výučbu toho, čo robí
@array
v skalárnom kontexte, a možno ak chcete použiť$size
viac ako raz.Veľkosť sa získa tak, že sa pole vloží do skalárneho kontextu, v ktorom sa vyhodnotí ako jeho veľkosť:
Toto je ďalší spôsob, ako vynútiť pole do skalárneho kontextu, keďže sa priraďuje do skalárnej premennej:
Tým sa získa index posledného prvku v poli, takže je to vlastne veľkosť mínus 1 (za predpokladu, že indexy začínajú od 0, čo je v Perle nastaviteľné, hoci je to zvyčajne zlý nápad):
Toto posledné nie je veľmi dobré použiť na zistenie veľkosti poľa. Bol by užitočný, ak chcete získať len posledný prvok poľa:
Ako môžete vidieť tu na Stack Overflow, väčšina zvýrazňovačov syntaxe túto konštrukciu nespracúva správne...