I have a function foo
. I want to call
setofbar = Set([Bar()])
setofbaz = Set([Baz()])
foo(setofbar)
foo(setofbaz)
To do so, I declared foo
as follows:
function foo(obj::Set{Union{Bar, Baz}})
This gives me a “no method matching” error for the following lines:
foo(setofbar)
foo(setofbaz)
What’s the right way to do dispatch here?
Set{Union{Bar, Baz}}
is a set of Bar and Baz, which is not what you pass. You want to accept either a set of Bar, or a set of Baz. That’s Set{T} where T<:Union{Bar, Baz}
EDIT: or Union{Set{Bar}, Set{Baz}}
, though it’s not strictly equivalent.
2 Likes
@cjstean I thought I would be able to figure it out based on your solution, but can you give me the concrete function definition for the case outlined?
function foo(obj::Set{T}) where {T <: Union{Bar, Baz}}
2 Likes