Score %0 (0 correct0 incorrect20 unanswered)

Q1. Welche Art der Umwandlung bewahrt den mathematischen Wert in allen Fällen?

  • i64 als i32
  • usize als u64
  • i32 als i64
  • f64 als f32

Q2. Was repräsentieren die senkrechten Striche hier?

str::thread::spawn(|| {
    println!("LinkedIn");
});
  • ein Closure
  • ein Thread
  • eine Future
  • ein Block

Referenz

Q3. Welche Auswahl ist keine skalare Datentyp?

  • Ganzzahl
  • Gleitkommazahl
  • Boolean
  • Tupel

Q4. _ kann nicht destrukturiert werden.

  • Traits
  • Tupel
  • Enums
  • Strukturen

Referenz

Q5. Welcher cargo-Befehl überprüft ein Programm auf Fehler, ohne eine ausführbare Binärdatei zu erstellen?

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

Q6. Der Begriff Box und verwandte Phrasen wie Verpacken eines Werts werden oft im Zusammenhang mit der Speicheranordnung verwendet. Worauf bezieht sich Box?

  • Es erstellt einen Zeiger im Heap, der auf einen Wert auf dem Stack zeigt.
  • Es erstellt einen Zeiger auf dem Stack, der auf einen Wert im Heap zeigt.
  • Es erstellt eine Speichersperre um Werte, um illegalen Zugriff zu verhindern.
  • Es ist eine Abstraktion, die sich auf Besitz bezieht. "Verpackte" Werte sind deutlich gekennzeichnet.

Q7. Wie kann slice alternativ geschrieben werden, um das gleiche Ergebnis zu erzielen?

...
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. Das Verwenden des ?-Operators am Ende eines Ausdrucks entspricht _.

  • einem Match-Muster, das sich in True oder False verzweigt
  • Aufrufen von ok_error()
  • Aufrufen von panic!()
  • einem Match-Muster, das möglicherweise zu einem vorzeitigen Rückgabewert führt

Q9. Welche Syntax ist gültig, um ein Array von i32-Werten zu definieren?

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

Q10. Welche Syntax ist erforderlich, um eine mutable Referenz auf T zu erhalten, wenn sie als Funktionsargument verwendet wird?

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

Q11. Die Smart-Pointer Rc und Arc bieten eine Referenzzählung. Was ist die API zum Inkrementieren einer Referenzzählung?

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

Referenz

Q12. Was passiert, wenn ein Fehler auftritt, der vom Fragezeichen (?) Operator behandelt wird?

  • Der Fehler wird gemeldet und die Ausführung wird fortgesetzt.
  • Eine Ausnahme wird ausgelöst. Die Auswirkung(en) der Ausnahme werden durch das error!-Makro definiert.
  • Das Programm panikt sofort.
  • Rust versucht, den Fehler in den lokalen Fehlertyp der Funktion umzuwandeln und gibt ihn als Result::Err zurück. Falls dies fehlschlägt, panikt das Programm.

Q13. Welche Kommentarsyntax ist nicht zulässig?

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

Q14. Bei Matching-Patterns werden Werte mit _ ignoriert.

  • .ignore()
  • ein Unterstrich (_)
  • ..
  • überspringen

Q15. Die Definition eines _ erfordert einen Lebensdauerparameter.

  • Funktion, die die Lebensdauer eines ihrer Argumente beendet
  • Struktur, die eine Referenz auf einen Wert enthält
  • Funktion mit einem generischen Argument
  • Struktur, die eine Referenz auf einen geboxten Wert enthält

Rust-Buch-Referenz

Q16. Welches Beispiel verwendet die Entry-API von std::collections::HashMap korrekt, um Zählungen zu erstellen?

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);
}

Referenz

Q17. Welcher Fragment verurs

acht keine Speicherzuweisungen beim Schreiben in eine "Datei" (dargestellt durch ein 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())?;
c.encode_utf8(&mut v);
  1. Beantwortet im Rust-Benutzerforum
  2. Referenz

Q18. Kompiliert die main-Funktion? Wenn ja, warum? Wenn nicht, was musst du ändern?

fn main() {
    let Some(x) = some_option_value;
}
  • Der Code kompiliert nicht. let-Anweisungen erfordern ein anfechtbares Muster. Füge if vor let hinzu.
  • Der Code kompiliert. let-Anweisungen erfordern manchmal ein anfechtbares Muster.
  • Der Code kompiliert nicht. let-Anweisungen erfordern ein unanfechtbares Muster. Füge if vor let hinzu.
  • Der Code kompiliert. let erfordert kein anfechtbares Muster.

Q19. Welche Aussage über Lebensdauern ist falsch?

  • Lebensdauern wurden in früheren Versionen von Rust redundant angegeben.
  • Lebensdauern werden angegeben, wenn eine Struktur eine Referenz auf einen Wert enthält.
  • Lebensdauern werden angegeben, wenn bestimmte Werte länger als andere existieren müssen.
  • Lebensdauern werden immer vom Compiler abgeleitet.

Q20. Wenn es als Rückgabetyp verwendet wird, spielt welche Rust-Typ eine ähnliche Rolle wie None in Python, null in JavaScript oder der void-Typ in C/C++?

  • !
  • None
  • Null
  • ()