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

在Julia中将类型参数作为函数参数引用,julia,Julia,我想在Julia中做一个“整数mod p”类型。(我肯定已经有了一个套餐,这只是一个个人练习。) 我在定义add时遇到一个错误,表示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与每个数字一起存储。我觉得这将是低效的,我的想法是在泛化过程中,它将是真正低效的。我宁

我想在Julia中做一个“整数mod p”类型。(我肯定已经有了一个套餐,这只是一个个人练习。)

我在定义add时遇到一个错误,表示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与每个数字一起存储。我觉得这将是低效的,我的想法是在泛化过程中,它将是真正低效的。我宁愿p只为类型指定一次,并在将该类型的东西作为参数的函数中引用。)

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

function add{p}(a::Intp{p},b::Intp{p})
    return Intp{p}((a.v + b.v) % p)
end
否则,您正在为一对
Intp{p}
值编写一个方法,其中
p
p
的当前特定值,在您的情况下,该值恰好是没有值的,因此会出现错误消息。Julia方法的一般特征是:

  • 方法名
  • {}
    中键入参数(可选)
  • ()

  • 谢谢你,斯蒂芬。我喜欢你的语言。
    function add{p}(a::Intp{p},b::Intp{p})
        return Intp{p}((a.v + b.v) % p)
    end