3 ms·
Wouldn't you end up with a Box of Null? Wouldn't it be better to: struct Node { value: i32 next: Option<Box<Node>> }
by vips7L 6y ago
Wouldn't you end up with a Box of Null? Wouldn't it be better to:
struct Node {
value: i32
next: Option<Box<Node>>
}
- brundolf 6y agoYeah 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.
- vips7L 6y agoIn that case wouldn't you just: struct List { head: Option<Node> } struct Node { value: i32, next: Option<Box<Node>> }
- brundolf 6y agoYep, 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.
- vips7L 6y agoI 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 }