当反序列化深度嵌套的 struct (例如来自JSON)时,必须遍历多个类型的情况并不少见.
例如:
let foo = Foo {
x: Some(Bar {
y: Some(Baz {
z: Some(42),
})
})
};
有没有一种惯用的链接选项的方法来访问深度嵌套的值?
到目前为止,我有以下内容,但在其他支持可选链接的语言中,它们都不如foo.x?.y?.z
简洁:
let z = foo.x.as_ref().and_then(|x| x.y.as_ref()).and_then(|y| y.z);
let z = foo.x.as_ref().and_then(|x| x.y.as_ref()?.z);
let z = (|| foo.x.as_ref()?.y.as_ref()?.z)();
看起来try_block
功能可能很适合,但目前不稳定.
let z = try { foo.x.as_ref()?.y.as_ref()?.z };