Rust 传递什么参数以及如何找出其类型?
我从mio网页中的示例开始,添加了主要功能: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<
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::”。