在构造函数中初始化类字段的 Rust 方式

图1NG

以 ruby​​ 中的 init 字段类为例。我想用 Rust 重写它。我设法用第二个代码段做到了,但我觉得每次都传递 self 来访问结构字段有点奇怪。我在做反模式吗?什么是更好的解决方案?非常感谢 <333

class Workspace

  def initialize(pathname)
    @pathname = pathname
  end

  def list_files
    Dir.entries(@pathname)
  end
end
// implementation
pub struct Workspace {
  pathname: i32,
}

impl Workspace {
  pub fn new(pathname: i32) -> Self {
    Self { pathname }
  }

  pub fn list_files(self) {
    println!("{}", self.pathname);
  }
}
// pilot
   let workspace = Workspace::new(5);
   Workspace::list_files(workspace);
马斯林

为了补充 Zeppi 的答案:self由于借用,在 Rust 中具有显式(但有特权)参数非常重要:当您定义时fn list_files(self),它可以被称为:

workspace.list_file()

但是self(因此workspace) 被移动了,这意味着它被调用消耗了,之后不能使用(尝试list_file第二次调用,你会得到一个错误)。

要更改行为,您必须指出该方法不使用主题,这是通过self使用参考信息进行注释来完成的,例如

fn list_file(&self)

可以以相同的方式调用,但只会在方法调用期间借用 workspaceworkspace之后仍然可用。

还有

fn list_file(&mut self)

更新工作区(并要求将变量定义为let mut workspace = ...)。

因此,正如 Zeppi 指出的那样,这种“显性自我”不仅非常普遍,而且实际上对 Rust [0]非常重要支持统一函数调用语法时也更自然,这正是您在原始帖子中使用它的方式。

[0] 从技术上讲,这个问题可以用不同的方式解决,例如 Swift 有一个隐式的self和注释的方法,但是&/&mut注释在 rust 中是标准的,所以重用它们比为同一件事添加单独的语法更有意义

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在类字段初始化后,以理智的方式运行“构造函数”或函数?

来自分类Dev

在类构造函数中初始化成员的快捷方式

来自分类Dev

在Rust中缓存资源的惯用方式

来自分类Dev

在Rust中模仿Python输入函数的惯用方式

来自分类Java

在构造函数或声明中初始化类字段?

来自分类Dev

如何以惯用的Rust方式处理来自libc函数的错误?

来自分类Dev

在Rust库中处理API密钥的最惯用方式?

来自分类Dev

从Rust中的if else条件分配值的惯用方式

来自分类Dev

在Rust中字节交换值的首选方式是什么?

来自分类Dev

Rust 中是否有内置或规范的方式来“发布”状态?

来自分类Dev

在Rust中处理多个`Option <T>`的惯用方式是什么?

来自分类Dev

为什么指定的初始化被gcc接受却没有效果,并且生成的聚合以某种方式作为参数传递给类构造函数

来自分类Java

如何以一种优雅的方式初始化具有很多字段的类?

来自分类Dev

容器初始化的方式?

来自分类Dev

不同的初始化方式

来自分类Dev

在Rust中,是否可以保证初始化结构字段的顺序?

来自分类Dev

以类似的方式初始化不同的类

来自分类Dev

Rust中函数参数评估和结构初始化的顺序是什么?

来自分类Dev

使用在 Rust 中返回元组的函数初始化两个结构成员

来自分类Dev

如何在类中初始化属性的方式上使用条件?

来自分类Dev

使用父类构造函数初始化列表在嵌套类字段中设置值

来自分类Dev

在Rust中逻辑上非法的未初始化变量

来自分类Dev

Rust中的显式部分数组初始化

来自分类Dev

在Rust中初始化字符串数组

来自分类Dev

如何在Rust中初始化泛型变量

来自分类Dev

构造函数中类字段的长时间运行初始化

来自分类Dev

是否可以在构造函数中使用this.fieldname初始化基类中的字段?

来自分类Dev

Rust中的通用构造函数

来自分类Dev

在具有副作用的函数的返回值上声明的Rust方式是什么?

Related 相关文章

  1. 1

    在类字段初始化后,以理智的方式运行“构造函数”或函数?

  2. 2

    在类构造函数中初始化成员的快捷方式

  3. 3

    在Rust中缓存资源的惯用方式

  4. 4

    在Rust中模仿Python输入函数的惯用方式

  5. 5

    在构造函数或声明中初始化类字段?

  6. 6

    如何以惯用的Rust方式处理来自libc函数的错误?

  7. 7

    在Rust库中处理API密钥的最惯用方式?

  8. 8

    从Rust中的if else条件分配值的惯用方式

  9. 9

    在Rust中字节交换值的首选方式是什么?

  10. 10

    Rust 中是否有内置或规范的方式来“发布”状态?

  11. 11

    在Rust中处理多个`Option <T>`的惯用方式是什么?

  12. 12

    为什么指定的初始化被gcc接受却没有效果,并且生成的聚合以某种方式作为参数传递给类构造函数

  13. 13

    如何以一种优雅的方式初始化具有很多字段的类?

  14. 14

    容器初始化的方式?

  15. 15

    不同的初始化方式

  16. 16

    在Rust中,是否可以保证初始化结构字段的顺序?

  17. 17

    以类似的方式初始化不同的类

  18. 18

    Rust中函数参数评估和结构初始化的顺序是什么?

  19. 19

    使用在 Rust 中返回元组的函数初始化两个结构成员

  20. 20

    如何在类中初始化属性的方式上使用条件?

  21. 21

    使用父类构造函数初始化列表在嵌套类字段中设置值

  22. 22

    在Rust中逻辑上非法的未初始化变量

  23. 23

    Rust中的显式部分数组初始化

  24. 24

    在Rust中初始化字符串数组

  25. 25

    如何在Rust中初始化泛型变量

  26. 26

    构造函数中类字段的长时间运行初始化

  27. 27

    是否可以在构造函数中使用this.fieldname初始化基类中的字段?

  28. 28

    Rust中的通用构造函数

  29. 29

    在具有副作用的函数的返回值上声明的Rust方式是什么?

热门标签

归档