我写了以下代码:
use std::io::{IoResult, Writer};
use std::io::stdio;
fn main() {
let h = |&: w: &mut Writer| -> IoResult<()> {
writeln!(w, "foo")
};
let _ = h.handle(&mut stdio::stdout());
}
trait Handler<W> where W: Writer {
fn handle(&self, &mut W) -> IoResult<()>;
}
impl<W, F> Handler<W> for F
where W: Writer, F: Fn(&mut W) -> IoResult<()> {
fn handle(&self, w: &mut W) -> IoResult<()> { (*self)(w) }
}
Run Code Online (Sandbox Code Playgroud)
然后rustc在我的终端:
$ rustc writer_handler.rs
writer_handler.rs:8:15: 8:43 error: the trait `core::marker::Sized` is not …Run Code Online (Sandbox Code Playgroud) 为什么都是&[u8]和&[u8; 3]确定在这个例子吗?
fn main() {
let x: &[u8] = &[1u8, 2, 3];
println!("{:?}", x);
let y: &[u8; 3] = &[1u8, 2, 3];
println!("{:?}", y);
}
Run Code Online (Sandbox Code Playgroud)
&[T; n]可以胁迫的事实&[T]是使它们可以容忍的方面. - 克里斯摩根
为什么可以&[T; n]胁迫&[T]?在其他条件下,这种强制发生了吗?
如果我尝试迭代两次切片,它可以正常工作:
let a = &[1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a { // works fine
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
如果我尝试迭代向量两次,它会失败:
let a = vec![1, 2, 3];
for i in a {
println!("{}", i);
}
for i in a {
println!("{}", i);
}
Run Code Online (Sandbox Code Playgroud)
error[E0382]: use of moved value: `a`
--> src/main.rs:6:14
|
3 | for i in a {
| - value moved here
...
6 | for i in …Run Code Online (Sandbox Code Playgroud) 我正在尝试将数组传递给函数:
fn my_func(xs: [usize]) -> usize {
0
}
fn main() {
let arr = [329, 457, 657];
let res = my_func(inp);
}
Run Code Online (Sandbox Code Playgroud)
我收到错误:
fn my_func(xs: [usize]) -> usize {
0
}
fn main() {
let arr = [329, 457, 657];
let res = my_func(inp);
}
Run Code Online (Sandbox Code Playgroud)
我该如何修复该错误?