小编rot*_*tty的帖子

什么时候我应该在Rust文件夹的Rust绑定中使用`&mut self`和`&self`?

我不确定何时使用&mut selfvs只是&self在libzmq C API的Rust绑定中.

一点背景:libzmq提供套接字"对象",它有一个类似于BSD套接字API的API,并由C中的不透明指针表示.这个指针实际上只是一个句柄,类似于POSIX文件描述符,而C API的设计使得它能够获得与该指针背后内存的任何引用.

在这种情况下,使用不可变的方法公开套接字方法是否安全且良好的API设计self?作为一个具体的例子,考虑zmq_send():

int zmq_send (void *socket, void *buf, size_t len, int flags);
Run Code Online (Sandbox Code Playgroud)

我认为它可以(并且应该)使用不可变的自我来暴露,即:

pub fn send(&self, data: &[u8], flags: i32) -> Result<()> { ... }
Run Code Online (Sandbox Code Playgroud)

然而,可比较的Rust标准库方法使用&mut self,例如std::io::Write::write(),如实现的那样std::net::TcpStream.另一方面,std::net::UdpStream::write()只需要&self.我的猜测是&mut self因为它是特征的实现而被使用Write,而这反过来(我猜)用于&mut self不限制特征的实现.

我希望有人可以在这里备份或反驳我的推测 - 我在书或Nomicon中找不到任何关于该主题的具体内容.

ffi rust

3
推荐指数
1
解决办法
251
查看次数

标签 统计

ffi ×1

rust ×1