Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

Wouldn't you end up with a Box of Null? Wouldn't it be better to:

    struct Node {
        value: i32
        next: Option<Box<Node>>
    }


Yeah that's true, but the problem with your version is it loses the homogeny because an empty list can't simply be a Node, it has to be represented in some other way (as an Option<Node> or something), so we're back to square one. Maybe I was wrong and this can't be done perfectly even with union types.


In that case wouldn't you just:

    struct List {
      head: Option<Node>
    }

    struct Node {
      value: i32,
      next: Option<Box<Node>>
    }


Yep, but this replicates the original inelegancy (from the article): Option<Node> and Option<Box<Node>> are not the same type, and so they can't be treated the same way.


I guess you could just allocate the head node on the heap too.

I think rust probably has better tools for this.

Probably some sort of

   let node = node.next;
   while let Some(n) = node {
       node = n.next
   }




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

Search: