Last Regrets

Rust的一个函数参数签名问题

· sdttttt

这个问题烦了了我1个小时。

fn parse_path_operation(
        &mut self,
        path: &str,
        op: Option<Box<impl FnOnce(&mut Self) + ?Sized>>,
    ) -> Result<bool, anyhow::Error>

self.parse_path_operation(path, None::<Box<dyn FnOnce(&mut IDir)>>)?;

这里记录一下这个签名的正确用法。

下次学乖了,这种编译器大小未知的trait类型一定要用Box或者其他的智能指针包起来,我想写成这样的签名完全不行,虽然被调用方的签名能通过编译,但是调用方的签名始终有问题,网上找了半天,还是得用智能指针管用…

Option<impl FnOnce(&mut Self) + ?Sized>