< 返回版块

rayw0ng 发表于 2021-08-25 11:42

在 tokio 的 mini-redis 例子里有这样一段代码

    // Extract the `shutdown_complete` receiver and transmitter
    // explicitly drop `shutdown_transmitter`. This is important, as the
    // `.await` below would otherwise never complete.
    let Listener {
        mut shutdown_complete_rx,
        shutdown_complete_tx,
        notify_shutdown,
        ..
    } = server;

不知道这是什么用法?

评论区

写评论
Cupnfish 2021-08-25 15:58

嗯嗯,是这种情况

--
👇
rayw0ng: 谢谢! 您说的不用特意解构是不是指的这种情况

#[derive(Debug)]
struct S{
    x:String,
    y:String,
}

fn main() {
    let s = S{x:"a".into(),y:"b".into()};
    drop(s.x);
    print!("{}",s.y);
}

这里 s 失去了部分所有权,不能作为一个整体使用,但另一部分所有权还能单独用。

👇
Cupnfish: 类似模式匹配,我没记错的话应该是叫做结构体解构,就是将等号右边的值解构成其结构体的各个字段,这样你可以直接访问其字段。在Rust里这样做还有个好处,可以分离所有权(不知道现在还适不适用,现在编译器好像更智能了,不用特意解构来着?)

作者 rayw0ng 2021-08-25 15:43

谢谢! 您说的不用特意解构是不是指的这种情况

#[derive(Debug)]
struct S{
    x:String,
    y:String,
}

fn main() {
    let s = S{x:"a".into(),y:"b".into()};
    drop(s.x);
    print!("{}",s.y);
}

这里 s 失去了部分所有权,不能作为一个整体使用,但另一部分所有权还能单独用。

👇
Cupnfish: 类似模式匹配,我没记错的话应该是叫做结构体解构,就是将等号右边的值解构成其结构体的各个字段,这样你可以直接访问其字段。在Rust里这样做还有个好处,可以分离所有权(不知道现在还适不适用,现在编译器好像更智能了,不用特意解构来着?)

Cupnfish 2021-08-25 13:38

类似模式匹配,我没记错的话应该是叫做结构体解构,就是将等号右边的值解构成其结构体的各个字段,这样你可以直接访问其字段。在Rust里这样做还有个好处,可以分离所有权(不知道现在还适不适用,现在编译器好像更智能了,不用特意解构来着?)

uno 2021-08-25 13:36

模式匹配

1 共 4 条评论, 1 页