之间有什么区别
#[allow(dead_code)]
// ...some code
Run Code Online (Sandbox Code Playgroud)
和
#[allow(unused)]
// ...some code
Run Code Online (Sandbox Code Playgroud) 我已经阅读了使用包、板条箱和模块管理不断增长的项目,但我仍然不太理解层次结构。我知道什么是 crate,并且包中应该至少有一个 crate:最多 1 个库 crate 和 0 个或更多二进制 crate。
第一:假设我想将两者lib.rs都main.rs放在包装中。如何从lib.rsin访问/调用函数main.rs?
其次:当我创建新库时,cargo new --lib library-name它会创建具有该名称的目录和一堆文件,我想出从该库中调用函数的唯一方法src/main.rs是:
mod some_library;
use crate::library_name::library_name::foo;
fn main() {
foo();
}
Run Code Online (Sandbox Code Playgroud)
// Filename: src/library_name.rs
pub mod library_name; // I don't really understand this
// Filename: src/library_name/library_name.rs
pub fn foo() {
// ...
}
Run Code Online (Sandbox Code Playgroud)
我有以下层次结构:
- package_name
- src
- library_name
- src
- lib.rs
- Cargo.toml
- library_name.rs
- library_name.rs
- main.rs
- …Run Code Online (Sandbox Code Playgroud) 如何修改if let语句以便它也处理另一个条件,例如Some(7) == b?
let a = Some(6);
let b = Some(7);
if let Some(6) = a /* && Some(7) = b */{
// do something
}
Run Code Online (Sandbox Code Playgroud) 我正在阅读可索引类型和“字典”模式让我困惑:
interface NumberOrStringDictionary {
[index: string]: number | string;
length: number; // ok, length is a number
name: string; // ok, name is a string
}
Run Code Online (Sandbox Code Playgroud)
interface StringArray {
[index: number]: string;
}
Run Code Online (Sandbox Code Playgroud)
两者有什么区别?如何用 的类型初始化变量NumberOrStringDictionary?为什么NumberOrStringDictionary的字段(length和name)依赖于索引签名字段?
NumberOrStringDictionary与此有何不同:
interface SquareConfig {
color?: string;
width?: number;
[propName: string]: any;
}
Run Code Online (Sandbox Code Playgroud) 当我遇到这个时,我正在阅读锈书:
fn main() {
let s1 = String::from("Hello, ");
let s2 = String::from("world!");
let s3 = s1 + &s2; // note s1 has been moved here and can no longer be used
}
Run Code Online (Sandbox Code Playgroud)
事实证明,'+操作员使用的add方法,其签名看起来像这样':
fn add(self, s: &str) -> String { // ... }
Run Code Online (Sandbox Code Playgroud)
我明白为什么s1被“消耗”并且以后不再可用的原因。但是为什么 rust 会这样呢?我的意思是,为什么方法不能add将 self ( &self) 作为第一个参数的引用,以便该s1字符串可供以后使用?
我想知道,假设我的实现是有效的,例如#[derive(Debug)]属性和我自己实现std::fmt::Debug某些结构的特征(或可以用derive属性添加的任何其他特征)之间有什么区别?编译时间会有差异吗?性能差异?
什么时候应该使用derive属性,什么时候应该自己实现特征?
我试图在没有任何库的情况下在 Rust 中交换两个整数。
fn main() {
let mut a = 5;
let mut b = 6;
swap(&mut a, &mut b);
println!("{}, {}", a, b); // expecting 6, 5
}
Run Code Online (Sandbox Code Playgroud)
首先我试过:
fn swap(mut a: &mut u32, mut b: &mut u32) {
(a, b) = (b, a); // destructuring assignments are not currently supported
}
Run Code Online (Sandbox Code Playgroud)
然后:
fn swap(mut a: &mut u32, mut b: &mut u32) {
let temp = a;
a = b;
b = temp;
}
// got error[E0623]: lifetime mismatch …Run Code Online (Sandbox Code Playgroud)