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

Reply via email to