Rust 传递什么参数以及如何找出其类型?

Rust 传递什么参数以及如何找出其类型?,rust,Rust,我从mio网页中的示例开始,添加了主要功能: extern crate mio; use std::thread; use mio::{EventLoop, Handler}; struct MyHandler; impl Handler for MyHandler { type Timeout = (); type Message = u32; fn notify(&mut self, event_loop: &mut EventLoop<

我从mio网页中的示例开始,添加了主要功能:

extern crate mio;

use std::thread;
use mio::{EventLoop, Handler};

struct MyHandler;

impl Handler for MyHandler {
    type Timeout = ();
    type Message = u32;

    fn notify(&mut self, event_loop: &mut EventLoop<MyHandler>, msg: u32) {
        assert_eq!(msg, 123);
        event_loop.shutdown();
    }
}

fn main() {
    let mut event_loop = EventLoop::new().unwrap();
    let sender = event_loop.channel();

    // Send the notification from another thread
    thread::spawn(move || {
        let _ = sender.send(123);
    });

    let _ = event_loop.run(&mut MyHandler);
}
引发错误:

error: mismatched types:
expected `&collections::string::String`,
found `&mio::event_loop::Sender<_>`
error: struct `Sender` is private
fn foo(s: &mio::event_loop::Sender<u32>) {
           ^
 error: the trait `mio::handler::Handler` is not implemented for the type `u32` [E0277]
src/main.rs:18 fn foo(s: &mio::event_loop::EventLoop<u32>) {
嗯,看起来像是死胡同,所以我想通过事件循环:

fn foo(s: &mio::event_loop::EventLoop<u32>) {
    let sender = s.channel().clone();
...
fn main() { ...
   foo(&event_loop); ...
fn foo(s:&mio::event\u loop::EventLoop){
让发送方=s.channel().clone();
...
fn main(){。。。
foo(&event_loop)。。。
但这就产生了一个错误:

error: mismatched types:
expected `&collections::string::String`,
found `&mio::event_loop::Sender<_>`
error: struct `Sender` is private
fn foo(s: &mio::event_loop::Sender<u32>) {
           ^
 error: the trait `mio::handler::Handler` is not implemented for the type `u32` [E0277]
src/main.rs:18 fn foo(s: &mio::event_loop::EventLoop<u32>) {
错误:没有为类型'u32`[E0277]实现trait'mio::handler::handler'
src/main.rs:18 fn foo(s:&mio::event\u loop::EventLoop){
这完全把我弄糊涂了

例如C/C++,我刚才已经把一个指针传递给了EndoLoP或发送器。 Rust想告诉我什么?如何让它在Rust中工作


环境:rustc 1.0.0(a59de37e9 2015-05-13)(2015-05-14建成),mio 0.3.5

发送方类型被重新导出为
mio::Sender
。编译器知道实际类型是
mio::event\u loop::Sender
,并报告它。目前没有办法自动确定您通常需要的类型,但您可以查看该方法的文档并查看它是否返回一个
Sender
。如果你点击文档中的
Sender
类型,你将看到的文档,实际上,将foo定义为
fn foo(s:&mio::Sender){…
,并称之为
foo(&Sender)谢谢!编译器在猜测你的类型方面是不完美的。我只是想看看在复杂容器中有迭代器的时候C++输出什么。我以前见过500个字符类型。这很有帮助,但是你还是需要考虑一下。另一个难题是当锈编译器告诉你使用“Cy::”你真的应该使用“std::”。