2017-06-22 19 views
10

Hala Perl 6 öğreniyorum. Lütfen cehaletin affedin. Ben Operators page okuyorum ve ben bir masanın başında bazı alışılmadık yapıları bulundu: Sınıf Dizisi ve sınıf Skaler tekrar okunur ama o bölümlerde @$xyz yapısını bulamıyorum

A Level Examples 
N Terms 42 3.14 "eek" qq["foo"] $x :!verbose @$array 

. :! ve @$ ne anlama geliyor? Tüm bu sembolik yapıları toplayan ve açıklayan uygun bir yer var mı?

Çok teşekkür ederim!

+0

Ben bazı küçük iyileştirmeler yaptık umut değeri False olan bir named argument harika bir soru. :) Ben bir 'document' etiketi ekledim çünkü bence meselenin kalbine gider. – raiph

cevap

9

@$foo$foo bir öğe değişken ve @(...) sözdizimi sadece kendi argüman üzerinde .list yöntemini çağıran olduğunu @($foo), kısaltmasıdır. Sözdizimsel formun resmi Perl 6 belgesinde belgelendiği yeri bulamadığım halde, yöntem ve sözdizimsel formun her ikisi de bazen "liste/dizi contextualizer" olarak adlandırılır.

Bunun için bir kullan, bir öğe kapsayıcısında depolanan bir Array üzerinde yinelemek istediğiniz zamandır. Bir öğe kabı çevreleyen et kabı olmadan düz dizi döner üzerinde .list çağrı ise, örneğin for döngüler gibi yerleşik in tek bir madde olarak kabul edilir (yani, "değeri listesi bağlamda yorumlanacaktır zorlar"):

my $foo = [1, 2, 3]; 

say $foo.perl;  # $[1, 2, 3] 
say $foo.list.perl; # [1, 2, 3] 
say @$foo.perl;  # [1, 2, 3] 

for $foo { ... }  # One iteration 
for $foo.list { ... } # Three iterations 
for @$foo { ... }  # Three iterations (identical to the previous line) 

:!foo , yani :foo(False) kısaltmasıdır

süreli konumunda ancak bir argüman listesinin bir argüman olarak yazılır
sub do-something (:$verbose = True) { say $verbose; } 

do-something;   # True 
do-something :verbose; # True 
do-something :!verbose; # False 

, bir Pair nesne oluşturur:

say (:!verbose);  # verbose => False 
+1

Çok teşekkür ederim! Öğrenmeye devam edeceğim! – lisprogtor

3

:verbose parametresini kullanmak Bool parametresini True değerini colon pair ile ayarlamanın iyi bir yolu olacaktır. :verbose(True)'a eşdeğerdir. :!verbose sadece False, :verbose(False) eşdeğerine ayarlayarak, bunun olumsuzluğudur.

@$ desene $ ile sayıl değişkenden container kaldırmak için @ öneki kullanılarak bir yoludur.

düşünün:

my $x = (1, 2, 3); 
.say for $x; 

Çıktı:

(1 2 3) 

vs

my $x = (1, 2, 3); 
.say for @$x; 

Çıktı:

1 
2 
3 

Çoğu operatör doğrudan aranabilir. Özellikle bu iki durum bireysel operatörler değil, sembollerin kombinasyon halinde kullanılması durumlarıdır. Bunlar elverişli bir şekilde biraz daha zor bir araya geliyor, ancak dokümanlar her geçen gün gelişiyor.

+0

Şimdi anladım. Teşekkürler Curt Tilmes !! – lisprogtor