On Thu, Aug 2, 2012 at 12:51 PM, Emmanuel Surleau <emmanuel.surl...@gmail.com> wrote: > Hi, > > I'm new to rust, and I'm struggling to find an elegant way to work with > default > parameters. > > I'm trying to implement in rust the equivalent of the following Python line: > > def flag(self, name, desc, short_name=None, max_count=1, banner=None): > ... > > The idea is to offer a "simple" API (with only name and desc mandatory, while > making available number of advanced options if needed). > > My first move was to try polymorphism: > > fn a(x: ~str) -> ~str { > #fmt("First function with %s", x) > } > > fn a(x: ~str, y: ~str) -> ~str { > #fmt("Second function with %s and %s", x, y) > } > > fn main() { > #info("Result: "); > } > > Oddly enough, this compiles, but the first function is shadowed by the second, > so attempting a(~"something") does not compile. I assume this is not an > intended > behaviour. >
Hi, Emmanuel -- I believe that the behavior you're observing is a bug; you shouldn't be able to declare two top-level function items with the same name, even if the types differ. So please file an issue with this code: https://github.com/mozilla/rust/issues Thanks. > Further research hasn't turned any solution. Is there some idiomatic way in > rust > of having defaults for parameters? A simple way to do it is with option types: fn a(x: ~str, y: option<~str>) -> ~str { /* do whatever */ } fn a_1(x: ~str) -> ~str { a(x, none) } You may be able to use traits and impls to overload the name a, but if you don't mind giving the different functions different names, this way doesn't require any fancy ideas. Cheers, Tim -- Tim Chevalier * http://catamorphism.org/ * Often in error, never in doubt "Debate is useless when one participant denies the full dignity of the other." -- Eric Berndt _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev