2014-10-11 78 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

相关问题