Hacker News new | past | comments | ask | show | jobs | submit login

This is neat. I really admire the willingness to document the type of stumbling around that characterizes lots of real programming, but which you rarely see.

I think it's a bummer you can't do `LevelMap::new()` like you want, but here are two things that work that I think are improvements on your `mklevel` function:

    fn mklevel() -> LevelMap { HashMap::new() }
That works because once the compiler knows that the return type is `LevelMap`, which it knows is really `HashMap<Coord, int>`, it can infer which variant of `HashMap::new` to call. Using this same idea, you can get closer to what you originally wanted without the function, like this:

    let mut map: LevelMap = HashMap::new();
There are also a couple things that I think are good syntactic improvements over the `Coord{x: 0, y: 0}` syntax that you made the `xy` function to avoid. First, you can just use a tuple:

    type LevelMapTuple = HashMap<(int, int), int>;

    let mut maptuple: LevelMapTuple = HashMap::new();
    maptuple.insert((0, 0), 0);
If you still want to give it a name, which I think is pretty nice, you can use a struct with anonymous members, like this:

    struct Coord(int, int);
    
    let mut map: LevelMap = HashMap::new();
    map.insert(Coord(0, 0), 0);
Here's a rust playpen link illustrating some of these things: http://is.gd/latFCh. Enjoy!



Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: