Oh, final reply to myself: I didn't notice that, in the original code, you did
'let part' instead of 'let mut part', in the generic function. After fixing
that, the code works.
Glenn
On Feb 3, 2013, at 12:24 AM, Glenn Willen wrote:
> Okay, at least in 0.5, multiple traits are spelled with a space, not a comma,
> oops.
>
> So it should be, after fixing most of the errors:
>
> use cmp::{Ord, Eq};
> ...
> fn foo_generic<T: Ord Eq ToStr Copy>...
>
> There is one error left that I haven't figured out:
>
> /tmp/foo.rs:7:16: 7:20 error: illegal borrow: creating mutable alias to
> dereference of immutable ~ pointer
> /tmp/foo.rs:7 quick_sort3(part);
>
> ^~~~
>
> I find it weird that this manifests only in the generic version; I don't
> really understand slices, so I'm not sure how to go about diagnosing it.
>
> Glenn
>
> On Feb 2, 2013, at 11:30 PM, Glenn Willen wrote:
>
>> I believe you need to specify, when declaring foo_generic, that your type T
>> has the Ord trait (i.e. that objects of type T can be ordered, which is
>> necessary in order for them to be sorted.) I think the way to do that is
>>
>> fn foo_generic<T: Ord>...
>>
>> When I test this, I have to 'use cmp::Ord;' in order to get Ord in scope.
>> Then I get a similar error about the Eq trait, but I have not yet figured
>> out how to convince rust that my type T also has Eq. The seemingly-obvious
>> thing of "T: Ord, Eq", combined with 'use cmp::Eq;' does not work.
>>
>> /tmp/foo.rs:8:4: 8:15 error: failed to find an implementation of trait
>> core::cmp::Eq for <V6>
>> /tmp/foo.rs:8 quick_sort3(part);
>>
>> (Although the error spells it core::cmp::Eq, using that doesn't help.)
>>
>> Note that I am using rustc 0.5 -- I think the syntax for this may have
>> changed since then, confusing things further.
>>
>> Glenn
>>
>> On Feb 2, 2013, at 10:36 PM, Alexander Stavonin wrote:
>>
>>> Hi,
>>>
>>> I'm not sure it is an defect or failure to fully understand from my side.
>>> I'd like to sort an array. Unfortunately, it is not easy to understand
>>> which sort function should be used, but looks like quick_sort3 is good
>>> enough.
>>>
>>> Than:
>>>
>>> 1 extern mod std;
>>> 2 use std::sort::*;
>>> 3
>>> 4 fn foo_generic<T>(data : &[T]) {
>>> 5 let part = data.slice(0, data.len()/2);
>>> 6 quick_sort3(part);
>>>
>>> 7 io::println(part.to_str());
>>> 8 }
>>> 9
>>> 10 fn foo(data : &[int]) {
>>> 11 let mut part = data.slice(0, data.len()/2);
>>> 12 quick_sort3(part);
>>> 13 io::println(part.to_str());
>>> 14 }
>>> 15 fn main() {
>>> 16 let data = ~[1, 3, 5, 2, 4, 6];
>>> 17 foo(data);
>>> 18 foo_generic(data);
>>> 19 }
>>>
>>>
>>> test.rs:6:4: 6:15 error: failed to find an implementation of trait
>>> @core::cmp::Ord for <V13>
>>> test.rs:6 quick_sort3(part);
>>> ^~~~~~~~~~~
>>>
>>> Is the foo_generic correct function?
>>>
>>> Regards,
>>> _______________________________________________
>>> Rust-dev mailing list
>>> [email protected]
>>> https://mail.mozilla.org/listinfo/rust-dev
>>>
>>>
>>> !DSPAM:510e0ce6261275098973934!
>>>
>>
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev