2014-10-11 12 views
5

में फ़ंक्शन पैरामीटर के रूप में किसी प्रकार पैरामीटर को संदर्भित करना मैं जूलिया में "पूर्णांक मोड पी" प्रकार बनाने की कोशिश कर रहा हूं। (मैं पहले से वहां इस बात के लिए एक पैकेज यकीन है, यह सिर्फ एक व्यक्तिगत व्यायाम है।)जूलिया

type Intp{p} 
    v::Int8 
end 

function add(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
    end 

मैं जब जोड़ने का कहना है कि पी परिभाषित नहीं है परिभाषित करने में कोई त्रुटि हो रही है। मैं अंदर जोड़ने से पी कैसे संदर्भित करूं?

(नोट:। मैं जैसे

type Intp 
    v::Int8 
    p 
end 

function add(a::Intp,b::Intp) 
    return Intp((a.v + b.v) % a.p,p) 
    end 

कुछ कर सकते हैं, लेकिन यह है कि पी हर एक नंबर के साथ संग्रहीत किया जा आवश्यकता होगी मुझे लगता है कि यह अक्षम किया जाएगा, और मैं सामान्यीकरण पर मेरे मन है, जहां यह होगा वास्तव में अक्षम हो। मैं इसके बजाय, केवल प्रकार के लिए निर्दिष्ट किया जाना चाहिए, और उस प्रकार के कार्यों को संदर्भित करता हूं जो तर्क के रूप में उस प्रकार की चीजें लेते हैं।)

उत्तर

7

आपका पहला उदाहरण बहुत करीब है, लेकिन आपको {p} के बीच शामिल करना होगा विधि का नाम और इस तरह के हस्ताक्षर:

जो, अपने मामले में, सभी में कोई मूल्य होता है, इसलिए त्रुटि संदेश -
function add{p}(a::Intp{p},b::Intp{p}) 
    return Intp{p}((a.v + b.v) % p) 
end 

अन्यथा, आप Intp{p} मूल्यों जहां p जो कुछ p की वर्तमान विशिष्ट मान हो सकता है की एक जोड़ी के लिए एक विधि लिख रहे हैं। तो एक जूलिया विधि के सामान्य हस्ताक्षर है:

  1. विधि नाम
  2. प्रकार { } (वैकल्पिक)
  3. बहस में ()
+1

में पैरामीटर आप स्टीफन धन्यवाद। मुझे आपकी भाषा पसंद है। –