小编109*_*149的帖子

15
推荐指数
1
解决办法
430
查看次数

什么是包、板条箱和模块?

我已经阅读了使用包、板条箱和模块管理不断增长的项目,但我仍然不太理解层次结构。我知道什么是 crate,并且包中应该至少有一个 crate:最多 1 个库 crate 和 0 个或更多二进制 crate。

第一:假设我想将两者lib.rsmain.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)

rust rust-cargo

6
推荐指数
1
解决办法
2115
查看次数

如何在if let语句中编写多个条件?

如何修改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)

rust

5
推荐指数
2
解决办法
718
查看次数

Typescript 中的可索引类型是什么?

我正在阅读可索引类型和“字典”模式让我困惑:

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的字段(lengthname)依赖于索引签名字段?

NumberOrStringDictionary与此有何不同:

interface SquareConfig {
  color?: string;
  width?: number;
  [propName: string]: any;
}
Run Code Online (Sandbox Code Playgroud)

typescript

5
推荐指数
1
解决办法
7321
查看次数

为什么字符串连接只消耗第一个字符串?

当我遇到这个时,我正在阅读锈书

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字符串可供以后使用?

rust

3
推荐指数
1
解决办法
90
查看次数

派生属性和自己实现结构的特征有什么区别?

我想知道,假设我的实现是有效的,例如#[derive(Debug)]属性和我自己实现std::fmt::Debug某些结构的特征(或可以用derive属性添加的任何其他特征)之间有什么区别?编译时间会有差异吗?性能差异?

什么时候应该使用derive属性,什么时候应该自己实现特征?

rust

3
推荐指数
1
解决办法
775
查看次数

如何交换两个数字?

我试图在没有任何库的情况下在 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)

rust

2
推荐指数
1
解决办法
194
查看次数

1
推荐指数
1
解决办法
1446
查看次数

标签 统计

rust ×7

compiler-warnings ×1

rust-cargo ×1

stdin ×1

typescript ×1