Было обсуждение о том, чтобы сделать поведение, которое вы описали, по умолчанию, но они, наконец, пришли к общему мнению, что ток может быть лучше.
По сути, это выбор синтаксиса того, что Vector{Integer}
средства. Существует три типа отклонений на выбор:
julia> Vector{Int32} <: (Vector{T} where T <: Integer)
true
julia> Vector{Any} <: (Vector{T} where T >: Integer)
true
julia> Vector{Integer} <: (Vector{T} where {T >: Integer, T <: Integer})
true
Три типа отклонения соответствуют трем различным операциям над переменной. Ковариация для чтения, контрастность для записи и инвариантность для обоих. Например, в Rust &'a T
является ковариантным относительно T
, потому что вы можете только читать из него, в то время как &'a mut T
является инвариантным, поскольку его можно читать и записывать. Если бы когда-либо существовал тип «только для записи», контраверсия была бы вменяемым значением по умолчанию. Данные переменные в Julia доступны как для чтения, так и для записи, поэтому выбор по умолчанию для инвариантности выглядит хорошим выбором.