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

Ale*_*ber 5 julia

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

Ste*_*ski 8

您的第一个示例非常接近,但您需要{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方法的一般签名是:

  1. 方法名称
  2. 类型参数{ }(可选)
  3. 参数 ( )

  • 最新版本的 Julia 不再接受此语法。相反,函数参数列表的右括号之后的“where”子句提供了对函数体中类型参数的访问:“function add(a::Intp{p},b::Intp{p}) where {p }` 答案 /sf/answers/2935849731/ 提供了有关此语法更改的其他信息。 (2认同)