Assignment Help logo
在线聊天

Loading...

Score %0 (0 correct0 incorrect20 unanswered)

Q1. 哪种类型转换在所有情况下都保留了数学值?

  • i64 as i32
  • usize as u64
  • i32 as i64
  • f64 as f32

Q2. 这里的竖线代表什么?

str::thread::spawn(|| {
    println!("LinkedIn");
});
  • 闭包
  • 线程
  • 未来

参考

Q3. 哪个选项不是标量数据类型?

  • 整数
  • 浮点数
  • 布尔值
  • 元组

Q4. _ 无法解构。

  • 特质
  • 元组
  • 枚举
  • 结构体

参考

Q5. 哪个 cargo 命令在不创建二进制可执行文件的情况下检查程序错误?

  • cargo --version
  • cargo init
  • cargo build
  • cargo check

Q6. 术语 box 及相关短语如 boxing a value 在涉及内存布局时经常使用。box 是指什么?

  • 它在堆上创建指向栈上值的指针。
  • 它在栈上创建指向堆上值的指针。
  • 它在值周围创建内存保护以防止非法访问。
  • 它是一个指代所有权的抽象。"Boxed" 值清楚地标记。

Q7. 写出一个产生相同结果的 slice 的替代方式。

...
let s = String::form("hello");
let slice = &s[0..2];
  • let slice = &s[len + 2];
  • let slice = &s[len - 2];
  • let slice = &s.copy(0..2);
  • let slice = &s[..2];

Q8. 在表达式的末尾使用 ? 运算符等同于 _

  • 分支进入 True 或 False 的匹配模式
  • 调用 ok_error()
  • 调用 panic!()
  • 可能导致早期返回的匹配模式

Q9. 定义包含 i32 值数组的语法是什么?

  • Array<i32>::with_capacity(10)
  • [i32]
  • Array<i32>::new(10)
  • [i32; 10]

Q10. 在函数参数中使用时,要获取到 T 的可变引用,需要什么语法?

fn increment(i: T) {
    // body elided
}
  • *mut T
  • mut ref T
  • mut &T
  • &mut T

Q11. 智能指针 Rc 和 Arc 提供引用计数。用于增加引用计数的 API 是什么?

  • .add()
  • .incr()
  • .clone()
  • .increment()

参考

Q12. 当由问号(?)操作符处理错误时会发生什么?

  • 报告错误并继续执行。
  • 引发异常。异常的影响由 error! 宏定义。
  • 程序立即 panic。
  • Rust 试图将错误转换为本地函数的错误类型,并将其作为 Result::Err 返回。如果失败,程序会 panic。

Q13. 哪种注释语法是非法的?

  • /*
  • #
  • //!
  • //

Q14. 在匹配模式中,使用 _ 忽略值。

  • .ignore()
  • an underscore (_)
  • ..
  • 跳过

Q15. 定义一个 _ 需要一个生命周期参数。

  • 结束其参数之一的生命周期的函数
  • 包含对值的引用的结构体
  • 具有泛型参数的函数
  • 包含对盒化值的引用的结构体

Rust 书籍参考

Q16. 哪个示例正确使用了 std::collections::HashMap 的 Entry API 来填充计数?

use std::collections::HashMap;
fn main() {
    let mut counts = HashMap::new();
    let text = "LinkedIn Learning";
    for c in text.chars() {
        // Complete this block
    }
    println!("{:?}", counts);
}
  • ­
for c in text.chars() {
    if let Some(count) = &mut counts.get(&c) {
        counts.insert(c, *count + 1);
    } else {
        counts.insert(c, 1);
    };
}
  • ­
for c in text.chars() {
    let count = counts.entry(c).or_insert(0);
    *count += 1;
}
  • ­
for c in text.chars() {
    let count = counts.entry(c);
    *count += 1;
}
  • ­
for c in text.chars() {
    counts.entry(c).or_insert(0).map(|x| x + 1);
}

参考

Q17. 在向“文件”(由 Vec<u8> 表示)写入时,哪个片段不会导致内存分配?

use std::

collections::HashMap;

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut v = Vec::<u8>::new();

    let a = "LinkedIn";
    let b = 123;
    let c = '🧀';

    // replace this line

    println!("{:?}", v);

    Ok(())
}
  • :
write!(&mut v, "{}{}{}", a, b, c)?;
  • :
v.write(a)?;
v.write(b)?;
v.write(c)?;
  • :
v.write(a, b, c)?;
  • :
v.write_all(a.as_bytes())?;
v.write_all(&b.to_string().as_bytes())?;
  1. 在 rust 用户论坛中已回答
  2. 参考

Q18. main 函数是否编译?如果是,为什么?如果不是,需要更改什么?

fn main() {
    let Some(x) = some_option_value;
}
  • 代码无法编译。let 语句需要可反驳模式。在 let 前添加 if
  • 代码编译。let 语句有时需要可反驳模式。
  • 代码无法编译。let 语句需要不可反驳模式。在 let 前添加 if
  • 代码编译。let 不需要可反驳模式。

Q19. 关于生命周期的哪个说法是错误的?

  • 在 Rust 的先前版本中,生命周期是多余指定的。
  • 当结构体持有对值的引用时,需要指定生命周期。
  • 在某些值必须比其他值存在更长时间时,需要指定生命周期。
  • 生命周期总是由编译器推断的。

Q20. 在作为返回类型使用时,哪种 Rust 类型类似于 Python 的 None、JavaScript 的 null 或 C/C++ 的 void 类型?

  • !
  • None
  • Null
  • ()