在Julia中引用类型参数作为函数参数

时间:2014-10-11 22:58:59

标签: julia

我试图制作一个"整数mod p"输入朱莉娅。 (我确定已经有了这个包,这只是个人练习。)

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存储在每个数字中。我觉得这样效率会很低,而且我会考虑一下它的效率会非常低效。我希望只为类型指定一次,并在函数中引用,将该类型的东西作为参数。)

1 个答案:

答案 0 :(得分:7)

您的第一个示例非常接近,但您需要在方法名称和签名之间包含{p},如下所示:

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

否则,您正在为一对Intp{p}值编写方法,其中pp的当前特定值 - 在您的情况下恰好是没有任何价值,因此错误信息。所以Julia方法的一般签名是:

  1. 方法名称
  2. { }(可选)
  3. 中输入参数
  4. ( )
  5. 中的参数