gpt4 book ai didi

rust - `use` 此源文件中未直接使用的特征所需的语句 : why?

转载 作者:行者123 更新时间:2023-11-29 08:30:34 26 4
gpt4 key购买 nike

在下面的代码中,删除第二行将导致编译错误:

type `std::io::net::tcp::TcpListener` does not implement any method in scope named `listen`

既然我没有直接使用 Listener(尽管 std 在内部使用它),为什么我需要指定它?

use std::io::{TcpListener, TcpStream};
use std::io::{Acceptor, Listener};

fn handle_client(mut stream: TcpStream) {
// ...
}

fn main() {
let args = std::os::args();
println!("{}", args);

let listener = TcpListener::bind("127.0.0.1", 80).unwrap();

let mut acceptor = listener.listen().unwrap();

for stream in acceptor.incoming() {
spawn(proc() {
handle_client(stream.unwrap());
});
}
}

最佳答案

要求显式使用实现方法的特征是语言的设计决定。例如在下面的代码中:

use my::A;
use my::B;

mod my {
pub trait A {
fn foo(&self);
}

pub struct B;

impl B {
pub fn bar(&self) {
println!("Called `bar`.");
}
}

impl A for B {
fn foo(&self) {
println!("Called `foo`.");
}
}
}

fn main() {
// Requires "use my::B".
let b = B;
b.bar();

// Requires "use my::A".
b.foo();
}

我认为这样做的动机很大程度上是因为目前没有无缝的方法来支持具有相同方法名称的多个特征。然而,在 atm 特征方面有很多工作要做 https://github.com/rust-lang/rfcs/blob/master/active/0024-traits.md .

关于rust - `use` 此源文件中未直接使用的特征所需的语句 : why?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24456645/

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