为 Julia 1.0 更新此声明

Update this statement for Julia 1.0

有人可以解释一下如何为 Julia 1.0 更新这个吗

function _encode_zigzag{T <: Integer}(n::T)
    num_bits = sizeof(T) * 8
    (n << 1) ⊻ (n >> (num_bits - 1))
end

还有什么区别:

function _encode_zigzag(n::Integer)
    num_bits = sizeof(T) * 8
    (n << 1) ⊻ (n >> (num_bits - 1))
end

首先,在 Julia 1.x 中,类型参数的子类型约束在参数之后声明,然后是保留字 where

function _encode_zigzag(n::T) where {T <: Integer}
    num_bits = sizeof(T) * 8
    (n << 1) ⊻ (n >> (num_bits - 1))
end

当只有一个类型参数时,花括号是不必要的,但为了清晰起见,建议保留。

现在开始第二个问题。在 n 是整数的方法版本中, sizeof 将不起作用,因为抽象类型的大小未定义。在这种情况下,建立子类型约束有助于确保给定参数具有定义的大小,同时仍然为不同类型提供灵活性。 Julia 会编译不同版本的函数;每个传递的整数子类型一个。

这比使用具有具体类型(如 Int64)的 n 声明函数更有效,因为这意味着在执行函数之前必须将参数转换为相同类型。

您可以在 Julia documentation 中阅读更多内容。