gpt4 book ai didi

rust - 为什么 impl 和普通函数之间的可变引用不一致?

转载 作者:行者123 更新时间:2023-12-05 00:50:55 25 4
gpt4 key购买 nike

对于 impl block 中的函数,我们使用以下语法:

fn test(&mut self) {}

但对于普通函数,我们使用以下语法:

fn test(data: &mut u64) {}

我理解 self 是一个变量,而 Self 是类型。在第一种情况下,我们将 &mut 与变量 (self) 一起使用,但在第二种情况下,我们将 &mut 与类型 (u64 )。为什么会出现这种不一致?

最佳答案

self 作为关联函数的第一个参数的存在有special meaning , 并且有特殊的速记语法:

  • selfself: Self
  • 的缩写
  • &selfself: &Self
  • 的缩写
  • &mut selfself: &mut Self
  • 的缩写

所以你可以看到 &mut self 中的 mut 是它的类型的一部分; self 是一个可变引用。


为了完整起见,您可能还会看到一个单独的 mut before 参数名称和类型。这意味着 变量 可以被变异和反弹,但不影响类型。这与 letlet mut 的区别相同。即 mut data: &u64 将意味着被引用的 u64 不能被修改,但变量 data 可以重新分配以引用不同的 u64.

关于rust - 为什么 impl 和普通函数之间的可变引用不一致?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73513543/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com