CodeBlanks Logo Icon CodeBlanks

Özet - Crate ve paket

Binary + library crate ve workspace'i birleştirerek bir monorepo kurarsın.

Crate ve paket özeti

Crate derleme birimidir: binary (main.rs) ya da library (lib.rs). Paket, Cargo.toml ile tanımlanır ve bağımlılıkları listeler; Cargo.lock tam sürümleri kilitler. Sürümler semver'e uyar ve "1.2" varsayılan olarak ^1.2 demektir. Feature'lar isteğe bağlı parçaları açar (#[cfg(feature = "..")]). Workspace birden çok paketi tek kilit dosyası ve hedef klasörüyle yönetir.

Sürüm ayrıştırma

Bir sürüm metnini sayılara çevirip vektör olarak karşılaştırmak doğru sırayı verir; Vec de sözlük sırasıyla karşılaştırılır:

fn ayristir(s: &str) -> Vec<u32> {
    s.split('.').map(|p| p.parse().unwrap()).collect()
}

let a = ayristir("1.4.2");    // [1, 4, 2]
let b = ayristir("1.10.0");   // [1, 10, 0]
println!("{}", a < b);        // true

Gerçek projelerde bunun için semver crate'i kullanılır; ön sürüm etiketlerini (1.0.0-beta) de doğru ele alır.

Uygulama Sürüm karşılaştır

Yukarıdaki ayristir fonksiyonunu yaz. "1.4.2" ve "1.10.0" için sayısal karşılaştırmanın (a < b) ve düz metin karşılaştırmasının sonuçlarını boşlukla yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
fn ayristir(s: &str) -> Vec<u32> {
    s.split('.').map(|p| p.parse().unwrap()).collect()
}

fn main() {
    let (x, y) = ("1.4.2", "1.10.0");
    println!("{} {}", ayristir(x) < ayristir(y), x < y);
}

Beklenen çıktı

true false

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 <code>"1.4.2" &lt; "1.10.0"</code> metin karşılaştırması neden yanlış sonuç verir?

  • Doğru sonuç verir
  • Derlenmez
  • Panic verir
  • Metinler karakter karakter karşılaştırılır; "4" > "1" olduğu için false çıkar Doğru cevap

Açıklama: Sürümler sayıya çevrilip bileşen bileşen karşılaştırılmalıdır.

2 Noktadan böl

Soru
s.____('.').map(|p| p.parse().unwrap()).collect()
Cevap
s.split('.').map(|p| p.parse().unwrap()).collect()

Açıklama: split sürüm metnini bileşenlerine ayırır.

3 Grubun özeti

Kavram Anlamı
lib.rs Kütüphane crate
Cargo.lock Tam sürümler
^1.2 <2.0.0
[workspace] Çoklu paket

Orta seviye bölümündeki tüm dersler