我正试图在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
Run Code Online (Sandbox Code Playgroud)
我在定义添加时遇到错误,表示p未定义.如何从内部添加引用p?
(注意:我可以做类似的事情
type Intp
v::Int8
p
end
function add(a::Intp,b::Intp)
return Intp((a.v + b.v) % a.p,p)
end
Run Code Online (Sandbox Code Playgroud)
但这需要p存储每个数字.我觉得这样效率会很低,而且我会考虑一下它的效率会非常低效.我宁愿只为类型指定一次,并在将该类型的东西作为参数的函数中引用.)
您的第一个示例非常接近,但您需要{p}在方法名称和签名之间包含如下:
function add{p}(a::Intp{p},b::Intp{p})
return Intp{p}((a.v + b.v) % p)
end
Run Code Online (Sandbox Code Playgroud)
否则,您正在为一对Intp{p}值编写一个方法,其中可能是p当前特定值的任何值p- 在您的情况下,它恰好不是任何值,因此是错误消息.所以Julia方法的一般签名是:
{ }(可选)( )