Rust: алғашқы қадамнан жеке жоспарлау құралына дейін 54-сабақ (барлығы 60)
Ыңғайлы пәрмендер
Сабақ 54. Түсінікті көмек беріп, қалыпты нәтижені қате хабарынан ажырату.
Мәтін ИИ көмегімен аударылды.
Іске қосу аргументтерін және пәрменді талдауды еске түсіріңіз. Мұнда тұрақты дерегі жоқ шағын органайзер қабығы көрсетілген.
Таныс бейне және тірек сызба
Қызмет орнында қалыпты жұмысқа бір терезе, қиындыққа басқа терезе бар. Терминалда stdout — қалыпты нәтиже ағыны, stderr — қате хабарының ағыны. Аяқталу коды басқа бағдарламаға істің нәтижесін білдіреді: 0 — сәтті, мұнда 2 — белгісіз пәрмен. Тірек сызба: аргументтер → пәрмен таңдау → stdout не stderr → аяқталу коды. Ұқсастық екі ағынның экранда үнемі бір ретпен көрінетінін білдірмейді.
std::env::args() іске қосу сөздерін береді: алғашқысы — бағдарлама жолы; skip(1) оны өткізіп, collect() қалғанын Vec<String> тізіміне жинайды. args.first() сөз болмағанда бос мән беруі мүмкін, сондықтан ол map арқылы түрленеді. as_str() салыстыруға ыңғайлы жол көрінісін береді. match ішіндегі | «осы нұсқалардың кез келгені» дегенді, if args.len() <= 1 қосымша шартты білдіреді. println! stdout-қа, eprintln! stderr-ге жазады. std::process::exit(code) нөлден өзге кодты жүйеге береді.
Іске қосып, талдаңыз
Тәуелділігі жоқ Cargo жобасын ашып, алғашқы Rust үзіндісін src/main.rs файлына қойыңыз. cargo run -- help бағдарламаға help сөзін береді: екі -- таңбасы Cargo аргументтерін аяқтайды. cargo run -- list бос тізімді шығарады. cargo run -- mystery қате көрсетеді; 2 коды іске қосылған бағдарламаға тиесілі. Төмендегі алғашқы нәтиже аргументсіз іске қосудан шығады. Cargo әсерінсіз кодты тексеру үшін жиналған target/debug/organizer файлын белгісіз сөзбен іске қосып, қабықтағы аяқталу кодын қараңыз.
fn run(args: &[String]) -> i32 {
match args.first().map(|word| word.as_str()) {
None | Some("help") | Some("--help") if args.len() <= 1 => {
println!("Пәрмендер: help, list");
0
}
Some("list") if args.len() == 1 => {
println!("Әзірше тапсырма жоқ");
0
}
_ => {
eprintln!("Белгісіз пәрмен");
2
}
}
}
fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
let code = run(&args);
if code != 0 {
std::process::exit(code);
}
}
Пәрмендер: help, list
Бетке қарамай жауап беріңіз
args()алғашқы сөзі неге өткізіледі?- Белгісіз пәрмен хабары қай ағынға түседі?
- Аяқталу коды басқа бағдарламаға не үшін керек?
Тапсырма
Міндетті. Қосымша сөзі жоқ status пәрменін қосыңыз: ол тапсырма саны 0 екенін шығарып, 0 кодын қайтарсын. status сөзін көмекке қосыңыз. status extra бұрынғыша 2 коды бар қате болсын.
Жауаптар
Жауаптарды көрсету
Some("status") if args.len() == 1 тармағын _ тармағының алдына қойыңыз. Көмек жолын жаңартыңыз, қате тармағын өзгертпеңіз.
fn run(args: &[String]) -> i32 {
match args.first().map(|word| word.as_str()) {
None | Some("help") | Some("--help") if args.len() <= 1 => {
println!("Пәрмендер: help, list, status");
0
}
Some("list") if args.len() == 1 => {
println!("Әзірше тапсырма жоқ");
0
}
Some("status") if args.len() == 1 => {
println!("Тапсырма саны: 0");
0
}
_ => {
eprintln!("Белгісіз пәрмен");
2
}
}
}
fn main() {
let args: Vec<String> = std::env::args().skip(1).collect();
let code = run(&args);
if code != 0 {
std::process::exit(code);
}
}
Пәрмендер: help, list, status
Тексергеннен кейін
Ағындар мен аяқталу коды органайзерді басқа бағдарлама шақырғанда қажет. Шын сақтау кезінде файл қатесі stderr-ге және нөлден өзге кодқа әкелуі тиіс. 36-сабаққа оралу. args құжаттамасы.
Пікірлер (0)
Пікір қалдыру үшін кіріңіз →
Әзірге пікір жоқ. Бірінші болыңыз.