【问题标题】:Referencing a type parameter as a function parameter in Julia在 Julia 中将类型参数引用为函数参数
【发布时间】:2014-10-12 07:58:41
【问题描述】:

我正在尝试在 Julia 中创建“integer 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

我在定义 add 时遇到错误,提示 p 未定义。如何从 add 内部引用 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 只为类型指定一次,并在以该类型作为参数的函数中引用。)

【问题讨论】:

    标签: julia


    【解决方案1】:

    您的第一个示例非常接近,但您需要在方法名称和签名之间包含{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. ( ) 中的参数

    【讨论】:

    • 谢谢斯特凡。我喜欢你的语言。
    • 最新版本的 Julia 不再接受这种语法。相反,where 子句 函数参数列表的右括号之后提供对函数主体中类型参数的访问:function add(a::Intp{p},b::Intp{p}) where {p} 答案 stackoverflow.com/a/41940710/5058794 提供有关此语法更改的其他信息。
    猜你喜欢
    • 2023-03-09
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    相关资源
    最近更新 更多