2008-09-19 6 views
14

fazla bilgi birleşme kavramını ortaya koymuştur. Diğer değerler kompozitleri olan değerleri [24] Perl 6'ların tasarımının ilk günlerinde, bunlara kuantum fizikslerindeki kuantum fiziği kavramına benzetilerek "süperpozisyonlar" deniyordu - gözlemler "gözlemlenene kadar" birkaç durumu aynı anda işgal edebilen dalga formları. 2000 yılında Damian Conway tarafından Quantum :: Superpositions [25] adlı bir Perl 5 modülü piyasaya sürüldü. İlk başta, bu tür süperpozisyon değerleri sadece programatik bir merak gibi göründü, zamanla bunların faydaları ve sezgiselliği yaygın bir şekilde kabul edildi ve kavşaklar Perl 6'nın tasarımında merkezi bir yer tutuyor. |Perl 6'nın kavşakları için ne gibi düşünebilirsiniz? <a href="http://en.wikipedia.org/wiki/Perl_6#Junctions" rel="noreferrer">the Perl 6 Wikipedia entry</a></p> <p><strong>Eklemlerinin</strong></p> <p>Perl 6

my $any_even_digit = 0|2|4|6|8; # any(0, 2, 4, 6, 8) 
my $all_odd_digits = 1&3&5&7&9; # all(1, 3, 5, 7, 9) 

: Onların basit haliyle

, kavşaklar junctive operatörleri ile bir takım değerleri birleştirerek oluşturulan sol veya sağ el argümanlarına eşit olan bir değeri gösterir. &, hem sol hem de sağ el argümanlarına eşit olan bir değeri gösterir. Bu değerler normal bir değer kullanacak herhangi bir kodda kullanılabilir. Bir kavşak üzerinde gerçekleştirilen operasyonlar, kavşağın tüm üyeleri üzerinde eşit davranır ve birleşim yerine göre birleştirilir. Yani, ("elma" | "muz") ~ "s" "elma" | "muz" verirdi. Karşılaştırmalarda, eklemeler karşılaştırma için tek bir doğru veya yanlış sonuç döndürür. Herhangi bir kavşağın elemanlarından herhangi biri için karşılaştırma doğruysa "herhangi bir" kavşak doğrudur. Birleşimdeki tüm elemanlar için karşılaştırma doğruysa "tüm" kavşaklar doğrudur.

Junctions da daha zengin türlerinden kavşaklar için sınırlanmıştır jenerik programlama stili tanıtarak tipi sistemini güçlendirmek için kullanılabilir:

sub get_tint (RGB_Color|CMYK_Color $color, num $opacity) { ... } 
sub store_record (Record&Storable $rec) { ... } 

cevap

11

belirli bir ayda kaç gün vardır?

given($month){ 
    when any(qw'1 3 5 7 8 10 12') { 
    $day = 31 
    } 
    when any(qw'4 6 9 11') { 
    $day = 30 
    } 
    when 2 { 
    $day = 29 
    } 
} 
+0

Ayrıca "()" yerine bir() 'yi de kullanabiliyordum, ancak" herhangi biri() "muhtemelen daha hızlı olacaktır. –

+0

Aslında Şubat davası için belki bir tane iade etmeliydim (28,29); –

6

kavşaklar en çekici özelliği karmaşık durumlar için kod testinin çok yazmak gerek kalmamasıdır. Kavşaklarla durumu tarif edersiniz, sonra testi uygularsınız. Cevabı nasıl aldığınızı düşünmüyorsunuz (örneğin, kısa devre operatörlerini veya blokları kullanarak) ama sorduğunuz soru. Ben bugünkü durumunun ne olduğunu bilmiyorum ancak

+3

Burada kastettiğiniz şeyin bir örneğini takdir ediyorum. – jettero

+0

Ditto! Lütfen Gerçek Dünya örneği verin. – kevinarpe

5

Autothreading, hoş geliyor.

for all(@files) -> $file { 
    do_something($file); 
} 

Junctions hiçbir düzen var, yani VM @files her eleman için bir iş parçacığı spawn ve paralel olarak hepsini işlemek serbesttir.

İlgili konular