如何连接以下types的组合: str和str String和str String和String
我迷失在std::cell模块中的types。 我也试图理解Rust中引用计数的包装,比如Rc和Arc 。 据我了解,这是提供进一步的可能性比简单的参考包装。 虽然我理解基础知识( RefCell给出了“dynamic借用”,而Rc在C ++中就像shared_ptr一样),但我仍然无法看到整个图像。 Rc和Arc什么联系? 细胞和参考计数的家庭提供正交function?
我不明白错误cannot move out of borrowed content 。 我已经收到了很多次,而且我总是解决它,但是我从来不明白为什么。 例如: for line in self.xslg_file.iter() { self.buffer.clear(); for current_char in line.into_bytes().iter() { self.buffer.push(*current_char as char); } println!("{}", line); } 产生错误: error[E0507]: cannot move out of borrowed content –> src/main.rs:31:33 | 31 | for current_char in line.into_bytes().iter() { | ^^^^ cannot move out of borrowed content 我通过克隆line解决了它: for […]
注意关于read_line和read_line这个问题的read_line属于Rust的1.0之前的版本。 关于unwrap_or和unwrap_or的一般概念仍然相关。 我在为Rubyists读Rust的时候遇到过: let mut reader = BufferedReader::new(io::stdin()); let input = reader.read_line().unwrap_or(~"nothing");
我已经离开了Rust一段时间,并出现了一个新的String 。 这和str什么区别? 什么时候使用String而不是str ,反之亦然? 其中之一是否被弃用?
比方说,我有这个结构 struct Triplet { one: i32, two: i32, three: i32, } 如果我把它传递给一个函数,它将被隐式复制 。 现在有时我读到有些值是不可复制的 ,因此不得不移动 。 我想知道,是否有可能使这个struct Triplet不可复制 ? 像实施一些额外的特点,告诉生锈,这将是不可复制的 ,因此必须移动 。 我到处读到,人们必须实现Clone特质才能复制那些不能隐式复制的东西,但是我从来没有读过其他方法,那就是隐式复制 ,使其不可复制 ,而不是复制 。 这甚至有什么意义吗?
我试图得到系统input,并检查用户是否放入是或否。 我在做我的string转换错误或什么? if块不执行。 use std::io; fn main() { let mut correct_name = String::new(); io::stdin().read_line(&mut correct_name).expect("Failed to read line"); if correct_name == "y" { println!("matched y!"); // Do something } else if correct_name == "n" { println!("matched n!"); // Do something else } }
注意:这个问题包含已弃用的1.0之前的代码! 但答案是正确的。 要将一个str转换为Rust中的一个int ,我可以这样做: let my_int = from_str::<int>(my_str); 我知道如何将一个String转换为一个int的唯一方法是获取它的一个片段,然后像这样使用from_str : let my_int = from_str::<int>(my_string.as_slice()); 有没有办法直接将String转换为int ?
fn change(a: &mut i32, b: &mut i32) { let c = *a; *a = *b; *b = c; } fn main() { let mut v = vec![1, 2, 3]; change(&mut v[0], &mut v[1]); } 当我编译上面的代码时,它有错误: error[E0499]: cannot borrow `v` as mutable more than once at a time –> src/main.rs:9:32 | 9 | change(&mut v[0], &mut […]
我有一个Trait集合,一个函数遍历它并做一些事情,然后我想检查一下实现者types,如果它是Footypes的,那么将其下传并调用一些Foo方法。 基本上,类似于Go的types切换和界面转换 。 search我发现关于任何特质,但它只能在'statictypes'static上实现。 为了帮助certificate我想要的东西: let vec: Vec<Box<Trait>> = // for e in vec.iter() { e.trait_method(); // if typeof e == Foo { // let f = e as Foo; // f.foo_method(); //} }