我正在尝试Grid从piston-2dgraphics库扩展struct.没有办法在特定单元格的窗口上获取位置,所以我实现了一个特征来为我计算.然后,我想要一种方法来计算网格上特定单元格的邻居,所以我实现了另一个特征.
关于这一点的事情是丑陋的,并且感觉不必要看,因为我可能永远不会将这些特征用于除了这个特定的网格结构之外的任何东西.Rust中是否有另一种扩展类型的方法,而不必每次都实现特征?
来自其他函数式语言(并且是Rust新手),我对Rust if let语法的动机感到有些惊讶.该RFC提到,如果没有if let,则"测试惯用的解决方案今天展开的Option<T>"或者是
match opt_val {
Some(x) => {
do_something_with(x);
}
None => {}
}
Run Code Online (Sandbox Code Playgroud)
要么
if opt_val.is_some() {
let x = opt_val.unwrap();
do_something_with(x);
}
Run Code Online (Sandbox Code Playgroud)
在Scala中,可以完全相同,但惯用的解决方案是map覆盖Option(或者foreach仅仅是为了副作用doing_something_with(x)).
为什么在Rust中做同样的事情不是惯用的解决方案?
opt_val.map(|x| do_something_with(x));
Run Code Online (Sandbox Code Playgroud)