< 返回版块

hzqd 发表于 2020-12-12 19:56

我们先来看两个函数:

trait KtStd {
    fn let_mut<R>(&mut self, mut block: impl FnMut(&mut Self) -> R) -> R {
        block(self)
    }

    fn let_mut_drop<R>(mut self, mut block: impl FnMut(&mut Self) -> R) -> R where Self: Sized {
        block(&mut self)
    }
}

impl<T> KtStd for T {}

然后我有如下问题:

  1. 为什么第一个函数体内部不能写成 block(&mut self)
  2. 第一个参数写成 &mut self,函数体内部的 self 类型就变成 &mut 了,那为什么高阶函数中的参数类型只写 Self 还是 immutable 的?
  3. 为什么 self 的类型 不能写成 mut Self,而必须写成 &mut Self
  4. 如果我要给高阶函数传入 mut self (而不是&mut self) 能做到吗?

评论区

写评论

还没有评论

1 共 0 条评论, 1 页