这不是极端的例子。
还想到另外一个例子:
fn foo(stat: Arc<Mutex<Stat>>) {
let stat0 = stat.lock().unwrap();
stat0.method1();
stat0.method2();
}
这里的 stat0,看上去是 Stat类型,也是在当成 Stat 来用。很直观。
但其实 stat0 是 MutexGuard<'_, Stat> 。
要像下面这么写的话,就麻烦了(还要引入MutexGuard这个定义),也没必要:
let stat0: MutexGuard<'_, Stat> = stat.lock().unwrap();
【 在 namoamituofo 的大作中提到: 】
: 这个例子很好,说明了极端情况下类型造成的代码难读。
: 能看出来这是你用“人肉编译器”推导出来的类型。这样做容易出错不说,还必须缓存在脑子里。放在纸面上尚且难以阅读,何况放在脑子里。
: 关于这行代码,至少人肉推导想多了,可以这样写:
: ...................
--
FROM 115.220.224.*