2016-01-09 37 views
5

Bazen katları çoğaltmak istemiyorum, özellikle daha sonra bir şeye dönüşebilen güzel bir yapıya sahip olmak istediğim bir fikirle uğraşırken. Ben olsun,Perl 6 modülünü programla aynı dosyada nasıl bildirebilirim?

module Foo { 
    sub foo (Int:D $number) is export { 
     say "In Foo"; 
     } 
    } 

foo(137); 

bu Running (Dinamik bir dil için biraz tuhaf olduğunu düşünüyorum) bir derleme hatası: Böyle bir şey yapmak istiyorum,

===SORRY!=== Error while compiling /Users/brian/Desktop/multi.pl 
Undeclared routine: 
    foo used at line 9 

the Perl 6 "Modules" documentation Okuma ben Bunu yapmak için herhangi bir yol görmüyorum, çünkü çeşitli fiiller belirli bir dosyaya bakmak ister. Alt yordam bildirimleri sözdizimidir, bu nedenle &foo modülün gövdesinin dışında görünmezdir.

+0

> I sen jnthn mükemmel PDF aracılığıyla ([dinamik ve statik ötesinde alınıyor] baktı mı (dinamik bir dil için biraz tuhaf olduğunu düşünüyorum) bir derleme hatası alıyorum http://www.jnthn.net /papers/2015-fosdem-static-dynamic.pdf)? (jnthn o sırada hastaydı ve başka küçük sorunlar da var [canlı sunumu] (https://www.youtube.com/watch?v=id4pDstMu1s&index=19&list=PLRuESFRW2Fa77XObvk7-BYVFwobZHdXdK) büyük değil ama Tamam.) – raiph

+0

@raiph Uzun zaman önce bunu okudum, ama bir noktaya daha çok şey söylemek zorunda kalacağınızı düşünüyorum. –

+0

Aiui Perl 6 kısmen statik bir dildir, örneğin, genellikle çok bölmeli (örneğin, operatörler) için tip denetimi ve gönderim çözünürlüğü ve derleme zamanında özel yöntemler yapabilir. Senin "garip" yorumunu aldım, demek istediğin şeyi bu şekilde görmedin ve jnthn'in sunumunu görmüş olsaydın merak ettin. – raiph

cevap

7

module Foo { 
    sub foo (Int:D $number) is export { ... } 
} 

import Foo; 
foo(137); 

Sadece kayıt için, el ile de ana hat bir &foo değişken bildirmek ve modül içinden o atamak olabilir: Bunu görünür hale getirmek için ana hat kodu bir import ifadesi eklemeniz gerekir

my &foo; 

module Foo { 
    sub foo (Int:D $number) { ... } # no export necessary 

    &OUTER::foo = &foo; 
} 

foo(137); 
+1

'İçe aktarım' aradığım şey. Bu nerede belgelendi? –

+2

[tasarım dokümanları] (http://design.perl6.org/S11.html#Importing_without_loading) ve [kullanıcı belgeleri] (http://doc.perl6.org/language/modules); Bu özel durum için, tasarım dokümanları daha net – Christoph

+3

tasarım belgelerinin 6.c gerçeğine karşılık gelmediğine dikkat edin: 'import' ifadesi, bir ''EXPORT' alt öğesi olmadan konumsal sembol isimlerini desteklemez, : adverbs' – Christoph

İlgili konular