Re: [rust-dev] How to use dynamic polymorphism with collection

2014-02-09 Thread Philippe Delrieu

Thank you.
My problem is more complex than the example I gave. Your answer help me 
in reorganizing my code. I use a lib that as generic method that why I 
put generic in the example. I remove them and change the way I pass 
parameters. I didn't solve everything but I think I'm progressing.

If I don't find the answer I'll post a new example.

Philippe

Le 09/02/2014 00:56, Ashish Myles a écrit :
On Sat, Feb 8, 2014 at 6:48 PM, Ashish Myles marci...@gmail.com 
mailto:marci...@gmail.com wrote:



On Sat, Feb 8, 2014 at 1:21 PM, Philippe Delrieu
philippe.delr...@free.fr mailto:philippe.delr...@free.fr wrote:

pub trait Base {
fn do_base(self);
}

struct TestBase;

impl Base for TestBase{
fn do_base(self){
println!(ici);
}
}

trait GenerciFn{
fn do_genericT: Base(self, base: T);
}

struct DoGenericFn;

impl GenerciFn for DoGenericFn {
fn do_genericT: Base(self, base: T){
base.do_base();
}
}

struct ToTestStr{
vec_gen: ~[~TestBase],
}

impl ToTestStr{
fn testgencallT: GenerciFn(self, gen: T){
for base in self.vec_gen.iter(){
//let test = base as ~TestBase;
gen.do_generic(**base);
}
}
}

#[main]
fn main() {
let base = TestBase;
let test = ToTestStr {vec_gen: ~[~base],};
let gen = DoGenericFn;
test.testgencall(gen);



It took me a few attempts to get the for loop right, but here you go.


pub trait Base {
fn do_base(self);
}

struct TestBase;

impl Base for TestBase {
fn do_base(self) {
println!(ici);
}
}

trait GenericFn {
fn do_generic(self, base: Base);
}

struct DoGenericFn;

impl GenericFn for DoGenericFn {
fn do_generic(self, base: Base) {
base.do_base();
}
}

struct ToTestStr {
vec_gen: ~[~Base],
}

impl ToTestStr {
fn testgencallT: GenericFn(self, gen: T){
for ref base in self.vec_gen.iter() {
gen.do_generic(**base);
}
}
}

#[main]
fn main() {
let testbase = TestBase;
let test = ToTestStr {vec_gen: ~[~testbase as ~Base],};

let gen = DoGenericFn;
test.testgencall(gen);
}


Also, for a little more runtime polymorphism, you could change 
testgencall's declaration to

fn testgencall(self, gen: GenericFn) {
...
}


___
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev


Re: [rust-dev] How to use dynamic polymorphism with collection

2014-02-08 Thread Ashish Myles
On Sat, Feb 8, 2014 at 6:48 PM, Ashish Myles marci...@gmail.com wrote:


 On Sat, Feb 8, 2014 at 1:21 PM, Philippe Delrieu philippe.delr...@free.fr
  wrote:

 pub trait Base {
 fn do_base(self);
 }

 struct TestBase;

 impl Base for TestBase{
 fn do_base(self){
 println!(ici);
 }
 }

 trait GenerciFn{
 fn do_genericT: Base(self, base: T);
 }

 struct DoGenericFn;

 impl GenerciFn for DoGenericFn {
 fn do_genericT: Base(self, base: T){
 base.do_base();
 }
 }

 struct ToTestStr{
 vec_gen: ~[~TestBase],
 }

 impl ToTestStr{
 fn testgencallT: GenerciFn(self, gen: T){
 for base in self.vec_gen.iter(){
 //let test = base as ~TestBase;
 gen.do_generic(**base);
 }
 }
 }

 #[main]
 fn main() {
 let base = TestBase;
 let test = ToTestStr {vec_gen: ~[~base],};
 let gen = DoGenericFn;
 test.testgencall(gen);



 It took me a few attempts to get the for loop right, but here you go.


 pub trait Base {
 fn do_base(self);
 }

 struct TestBase;

 impl Base for TestBase {
 fn do_base(self) {
 println!(ici);
 }
 }

 trait GenericFn {
 fn do_generic(self, base: Base);
 }

 struct DoGenericFn;

 impl GenericFn for DoGenericFn {
 fn do_generic(self, base: Base) {
 base.do_base();
 }
 }

 struct ToTestStr {
 vec_gen: ~[~Base],
 }

 impl ToTestStr {
 fn testgencallT: GenericFn(self, gen: T){
 for ref base in self.vec_gen.iter() {
 gen.do_generic(**base);
 }
 }
 }

 #[main]
 fn main() {
 let testbase = TestBase;
 let test = ToTestStr {vec_gen: ~[~testbase as ~Base],};

 let gen = DoGenericFn;
 test.testgencall(gen);
 }


Also, for a little more runtime polymorphism, you could change
testgencall's declaration to
fn testgencall(self, gen: GenericFn) {
...
}
___
Rust-dev mailing list
Rust-dev@mozilla.org
https://mail.mozilla.org/listinfo/rust-dev