Özet - Crate ve paket
- Rust kursu
- Orta seviye
- Ders 82/115
- 5 dk
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); // trueGerç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
fn main() {
// buraya yaz
}Örnek çözüm
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" < "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
s.____('.').map(|p| p.parse().unwrap()).collect()
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 |