If a type implements both Iterator and RandomAccessIterator, wouldn't
it lead to a conflict?

On Thu, May 29, 2014 at 6:02 PM, Eric Reed <[email protected]> wrote:
> You have to make the varying type the type implementing the trait.
>
> trait Foo {
>     fn foo(arg: Self, some_int: int);
> }
>
> impl<T: Iterator> Foo for T {
>     fn foo(arg: T, some_int: int) { ... /* arg implements Iterator */ }
> }
>
> impl<T: RandomAccessIterator> Foo for T {
>     fn foo(arg: T, some_int: int) { ... /* arg implements
> RandomAccessIterator */ }
> }
>
> Although traits are the tool you're supposed to use to do this, there are a
> couple issues at the moment:
> - The compiler can sometimes get scared and confused when you start mixing
> generic impls and concrete impls (or multiple generic impls). This should be
> fixed eventually.
> - You can only vary on one type. Long term, this can be fixed by making our
> traits MultiParameterTypeClasses instead of just regular Type Classes. Short
> term, you can avoid this by impl'ing on a tuple of the varying types.
>
>
> On Thu, May 29, 2014 at 5:52 PM, Tommi <[email protected]> wrote:
>>
>> On 2014-05-30, at 3:42, Eric Reed <[email protected]> wrote:
>>
>> > Rust *does* have function overloading. That's *exactly* what traits are
>> > for.
>> > If you want to overload a function, then make it a trait and impl the
>> > trait for all the types you want to overload it with.
>>
>> I've been trying to figure out how exactly to do this. How would I write a
>> function that's overloaded based on whether its argument's type implements
>> Iterator or RandomAccessIterator?
>>
>
>
> _______________________________________________
> Rust-dev mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev

Reply via email to