Со следующим кодом:
import Base.convert
abstract type MySequential end
struct MyFiniteSequence{T} <: MySequential
vec::NTuple{N,T} where N
end
Base.convert(MyFiniteSequence, r) = MyFiniteSequence{typeof(r)}((r,))
Теперь попробуйте:
julia> convert(MyFiniteSequence, 1)
MyFiniteSequence{Int64}((1,))
Пока все хорошо. Теперь попробуйте выполнить преобразование имплика:
julia> MyFiniteSequence(1)
ERROR: MethodError: no method matching MyFiniteSequence(::Int64)
Closest candidates are:
MyFiniteSequence(::Tuple{Vararg{T,N}} where N) where T at REPL[2]:2
Stacktrace:
[1] top-level scope at REPL[5]:1
Я думаю, что есть проблема из-за аннотаций {T, N}, но я не уверен, как нужно изменить синтаксис преобразования. Есть ли способ определить convert, чтобы получить неявное преобразование из Int в struct?