System typów w języku Julia


Details
Cel tego spotkania jest prosty. Chcę pokazać uczestnikom co znaczy poniższa definicja funkcji (prawdziwy kod w bibliotece DataFrames.jl z dokładnością do formatowania, którego meetup.com nie chce mi zrobić dobrze):
function rename!(df::AbstractDataFrame,
args::Union{AbstractVector{<:Pair{Symbol,<:AbstractString}},
AbstractVector{<:Pair{<:AbstractString,Symbol}},
AbstractVector{<:Pair{<:AbstractString,<:AbstractString}}})
rename!(index(df), [Symbol(from) => Symbol(to) for (from, to) in args])
return df
end
i czym się różni w działaniu od:
function rename!(df::AbstractDataFrame,
args::AbstractVector{<:Pair{<:Union{Symbol,AbstractString}, <:Union{Symbol,AbstractString}}})
rename!(index(df), [Symbol(from) => Symbol(to) for (from, to) in args])
return df
end
(ta wersja została odrzucona jako niepożądana)
Przy okazji pomówimy o covariance, contravariance i invariance w systemie plików języka Julia (piszę po angielsku, ponieważ nigdy nie mam pewności jak najlepiej te terminy na język polski przetłumaczyć).
Wszystkich zainteresowanych serdecznie zapraszam,
Bogumił

System typów w języku Julia