Hi Bill, It works for a single argument, but not for multiple ones. I have a self-contained example:
--8<---------------cut here---------------start------------->8--- module Foos type Foo{T <: Tuple} end m1{T}(f::Foo{Tuple{T}}, index::T...) = 42 # suggested by Bill Hart m2{T}(f::Foo{T}, index::T...) = 42 # what I thought would work _m3{T}(f::Foo{T}, index::T) = 42 # indirect solution m3{T}(f::Foo{T}, index...) = _m3(f, index) end f1 = Foos.Foo{Tuple{Int}}() Foos.m1(f1, 9) # works Foos.m2(f1, 9) # won't work Foos.m3(f1, 9) # works f2 = Foos.Foo{Tuple{Int,Symbol}}() Foos.m1(f2, 9, :a) # won't work Foos.m2(f2, 9, :a) # won't work Foos.m3(f2, 9, :a) # indirect, works --8<---------------cut here---------------end--------------->8--- For more than one argument, only the indirect solution works. Best, Tamas On Wed, Mar 23 2016, via julia-users wrote: > The following seems to work, but I'm not sure whether it was what you > wanted: > > import Base.getindex > > type Foo{T <: Tuple} > end > > getindex{T}(f::Foo{Tuple{T}}, index::T...) = 42 > > Foo{Tuple{Int}}()[9] > > Bill. > > On Wednesday, 23 March 2016 14:38:20 UTC+1, Tamas Papp wrote: >> >> Hi, >> >> My understanding was that ... in a method argument forms a tuple, but I >> don't know how to dispatch on that. Self-contained example: >> >> import Base.getindex >> >> type Foo{T <: Tuple} >> end >> >> getindex{T}(f::Foo{T}, index::T...) = 42 >> >> Foo{Tuple{Int}}()[9] ## won't match >> >> ## workaround with wrapper: >> >> _mygetindex{T}(f::Foo{T}, index::T) = 42 >> mygetindex{T}(f::Foo{T}, index...) = _mygetindex(f, index) >> >> mygetindex(Foo{Tuple{Int}}(), 9) >> >> Is it possible to make it work without a wrapper in current Julia? >> >> Best, >> >> Tamas >>