क्या राकुट में निर्यात किया जा सकता है?


9

मैं कुछ सबसेट को परिभाषित करना चाहूंगा, जिसमें मैं dieकुछ उपयोगी त्रुटि संदेशों के लिए कुछ बाधाएं और कुछ बयान भी जोड़ रहा हूं । मैं उन्हें मॉड्यूल के शीर्ष पर परिभाषित नहीं करना चाहता जो उन सबसेट का उपयोग करता है और इसके बजाय उन्हें किसी अन्य मॉड्यूल में रखना चाहता है, जबकि उनके पूरी तरह से योग्य नामों (FQNs) का उपयोग करके भी दूर कर रहा है। उदाहरण के लिए, मेरे पास है

unit module Long::Module::Subsets;

subset PosInt
where ($_ ~~ Int || "The value must be an integer")
   && ($_ > 0    || "The value must be greater than 0")
is export
;

# other subsets ...

लेकिन मिल गया

===SORRY!=== Error while compiling /tmp/637321813/main.pl6
Two terms in a row ...

काम नहीं कर रहा है मुझे लगा कि मैं इसके बजाय कुछ कर सकता हूं लेकिन मैं सोच रहा हूं कि क्या मैं इसे करने से बच सकता हूं:

use Long::Module::Subsets;

unit Long::Module;

my constant PosInt = Long::Module::Subsets::PosInt;
my constant Byte   = Long::Module::Subsets::Byte;
# ... more subsets here

# ... some code here

my PosInt $age;

1
एक साइड नोट के रूप में, एक सामान्य सबसेट मॉड्यूल है जिसमें PosInt शामिल है: github.com/bradclawsie/Subsets-Common
user0721090601

जवाबों:


12

सब्सक्रिप्शन वास्तव में निर्यात किया जा सकता है। यहाँ समस्या यह है कि उपसमुच्चय is exportको विशेषता ठीक से लागू नहीं होती है PosInt(और कोई अन्य उपसमुच्चय जो आपने निर्यात करने की इच्छा भी की होगी); नए प्रकार को परिभाषित किए जाने के तुरंत बाद और किसी भी बाधा के साथ पेश किए जाने से ठीक पहले विशेषता को लागू किया जाना चाहिए where। विशेषता को सही ढंग से लागू करने से:

unit module Long::Module::Subsets;

subset PosInt is export
where ($_ ~~ Int || "The value must be an integer")
   && ($_ > 0    || "The value must be greater than 0")
;

# other subsets ...

निम्नलिखित को ठीक काम करना चाहिए:

use Long::Module::Subsets;

unit Long::Module;

# ... some code here

my PosInt $age;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.