KT
struct LVector{T,A <: AbstractVector{T},Syms} <: AbstractVector{T}
__x::A
LVector{Syms}(__x) where {T,A,Syms} = new{eltype(__x),typeof(__x),Syms}(__x)
endSize: a a a
KT
struct LVector{T,A <: AbstractVector{T},Syms} <: AbstractVector{T}
__x::A
LVector{Syms}(__x) where {T,A,Syms} = new{eltype(__x),typeof(__x),Syms}(__x)
endАО
KT
KT
АО
АО
АО
KT
KT
АО
АО
KT
symnames(::Type{LVector{T,A,Syms}}) where {T,A,Syms} = Syms
function Base.getindex(x::LVector,::Val{s}) where s
idx = findfirst(y->y==s,symnames(typeof(x)))
x.__x[idx]
endАО
АО
idx = findfirst(y->y==s,symnames(typeof(x)))
KT
АО
KT
symnames(::Type{LVector{T,A,Syms}}) where {T,A,Syms} = SymsKT
symnames(x :: LVector{T,A,S}) = SАО
(1, 1.0). Его тип будет Tuple{Int, Float64}Int или Float64. Для этого ты вычисляешь, где именно в типе находится Int/Float и производишь вызов соответствующего элемента тупла.АО
X, Y, ты получишь Named tuple