2014-10-11 46 views
5

我試圖在Julia中創建一個「整型mod p」類型。 (我相信已經有一個包,這一點,它只是一個個人的運動。)在Julia中引用一個類型參數作爲函數參數

type Intp{p} 
    v::Int8 
end 

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

定義添加表示p不是定義時,我得到一個錯誤。如何從內部添加引用p?

(注:我可以做類似

type Intp 
    v::Int8 
    p 
end 

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

但是這需要使得p存儲與每一個單一的數字我覺得這將是低效的,我有我的腦海裏就概括哪裏會真的是效率低下,我寧願只指定一次,爲類型,並在函數中引用該函數作爲參數。)

回答

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

謝謝斯特凡。我喜歡你的語言。 – 2014-10-12 18:12:21

相關問題