Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 35-сабақ (барлығы 40)
Іске қосу аргументтері: пәрмен мен бос орны бар атау
35-сабақ. Жоспарлау құралына әрекет пен атауды пәрмен жолынан іске қосқанда беру.
Мәтін ИИ көмегімен аударылды.
Алдын ала: 4, 14, 22, 26, 30–31 және 34-сабақтар. Option мен Some ұмытылса, 31-сабақты қайталаңыз.
Таныс бейне және тірек сызба
Асханаға кірген соң тапсырысты ауызша айтуға да, кіргенде дайын қағазды беруге де болады. 34-сабақ жолды бағдарлама іске қосылғаннан кейін оқыды. Енді сөздерді бағдарлама іске қосылған кезде береміз; оларды іске қосу аргументтері дейміз. Ұқсатудың шегі: пәрмендік орта жазылған жолды алдымен өз ережесімен бөліктерге бөледі; Rust дайын бөліктерді алады.
Пәрмен жолы → cargo run -- → бағдарлама аргументтері → args() → next() → Option<String> → әрекет. cargo run соңындағы екі сызықша -- Cargo параметрлерін біздің бағдарламаға берілетін сөздерден бөледі. cargo run -- add "Rust оқу" жолында add пен Rust оқу екі аргумент болады: тырнақша бос орны бар сөздерді біріктіреді, бірақ атауға кірмейді. Тырнақша болмаса, атау бірнеше бөлікке бөлінеді. std::env::args() String мәндерін ретімен береді; біріншісі әдетте бағдарламаның өз жолы. .next() келесі мәнді Some(String) түрінде қайтарады, ал мән қалмаса None береді. Әр шақыру келесі орынға өтеді. _program атауы мәннің әдейі қолданылмайтынын білдіреді: атаудың басындағы _ қолданылмаған айнымалы туралы ескертуді басады.
Бағдарламаға бір пәрмен беру
organizer жобасының бұрынғы src/main.rs файлын сақтап, оны толық ауыстырыңыз. Әуелі Cargo.toml бар бумада cargo run орындаңыз. Басқа файл мен тәуелділік өзгермейді. Аргументсіз іске қосқанда төмендегі көмек жолы шығады. Кейін cargo run -- add "Rust оқу" орындаңыз: Қосу: Rust оқу шығады. Әзірше бұл болашақ әрекеттің хабарламасы ғана; деректі сақтау кейін қосылады.
(command, title, extra) кортежі үш .next() нәтижесін біріктіреді. (Some(command), Some(title), None) үлгісі пәрмен мен атау бар, артық сөз жоқ кезде ғана сәйкес келеді. 30-сабақтағы _ өзге жағдайларды қамтиды. command == "add" атауды аудармай, таныс пәрмен сөзін салыстырады.
fn main() {
let mut args = std::env::args();
let _program = args.next();
let command = args.next();
let title = args.next();
let extra = args.next();
match (command, title, extra) {
(Some(command), Some(title), None) => {
if command == "add" {
println!("Қосу: {title}");
} else {
println!("Белгісіз пәрмен: {command}");
}
}
_ => println!("Қолдану: organizer add \"Атау\""),
}
}
Қолдану: organizer add "Атау"
cargo run -- add "Rust оқу" орындалса, Қосу: Rust оқу басылады. add — 2-сабақтағы «қосу» пәрмені. Көмек жолындағы organizer атауы бағдарламаны құрастырғаннан кейінгі іске қосу үлгісін көрсетеді; әзірше cargo run -- қолданыңыз. Басқа пәрмендер мен деректі сақтау әлі қосылған жоқ.
Жетпейтін не артық сөз
add соңында атау болмаса, title — None, сондықтан көмек жолы көрінеді. Бос орны бар атауды тырнақшасыз берсеңіз, артық бөлік extra ішінде Some(...) болады; бағдарлама атаудың жартысын жоғалтпай, көмек көрсетеді. "" арқылы бос атау бөлек бар аргумент ретінде берілуі мүмкін; қазіргі код оны тексермейді. Мұны пәрмендерді талдағанда қосамыз. std::env::args() дұрыс Unicode мәтіні бар аргументтерге арналған; өзге байттарға бөлек тәсіл бар, ол қазір қажет емес.
Түсінгеніңізді тексеріңіз
cargo run -- add ...ішіндегі--не үшін керек?- Неге алғашқы
.next()мәні_programболады? - Бос орны бар атаудан тырнақшаны алып тастасаңыз не өзгереді?
Жауап: бағдарлама сөздерін Cargo параметрлерінен бөледі; бірінші аргумент — бағдарламаның жолы; атау бөлініп, артық аргумент пайда болады. Тірек сызбаны жатқа айтыңыз.
Тапсырма
Міндетті. Дәл осы үлгіні жасап, add үшін Жоспарланды: АТАУ, белгісіз пәрменге Пәрмен табылмады, толық емес не артық аргументтерге Қажет: add "Атау" көрсетіңіз. cargo run -- add "Менің жоспарым" және аргументсіз іске қосуды сынаңыз. Атау кодтағы дайын мәтіннен емес, args ішінен алынсын.
Шекара. cargo run -- add Менің жоспарым деп тырнақшасыз орындаңыз. Неге көмек жолы шығатынын түсіндіріңіз.
Ишара
Төрт .next() шақыруын сақтаңыз: бағдарлама жолы, пәрмен, атау, артық сөз. Екі Some, бір None үлгісінде command мәнін "add" сөзімен салыстырыңыз.
Талпыныстан кейінгі үлгі жауап
fn main() {
let mut args = std::env::args();
let _program = args.next();
let command = args.next();
let title = args.next();
let extra = args.next();
match (command, title, extra) {
(Some(command), Some(title), None) => {
if command == "add" {
println!("Жоспарланды: {title}");
} else {
println!("Пәрмен табылмады");
}
}
_ => println!("Қажет: add \"Атау\""),
}
}
Қажет: add "Атау"
Нәтиже блогы аргументсіз іске қосуды көрсетеді; cargo run -- add "Менің жоспарым" үшін Жоспарланды: Менің жоспарым шығады. Аргументтер туралы ресми тарау және cargo run -- ережесі.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.