Shanraq.org Shanraq.org
Іске қосу аргументтері: пәрмен мен бос орны бар атау
IT

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 соңында атау болмаса, titleNone, сондықтан көмек жолы көрінеді. Бос орны бар атауды тырнақшасыз берсеңіз, артық бөлік extra ішінде Some(...) болады; бағдарлама атаудың жартысын жоғалтпай, көмек көрсетеді. "" арқылы бос атау бөлек бар аргумент ретінде берілуі мүмкін; қазіргі код оны тексермейді. Мұны пәрмендерді талдағанда қосамыз. std::env::args() дұрыс Unicode мәтіні бар аргументтерге арналған; өзге байттарға бөлек тәсіл бар, ол қазір қажет емес.

Түсінгеніңізді тексеріңіз

  1. cargo run -- add ... ішіндегі -- не үшін керек?
  2. Неге алғашқы .next() мәні _program болады?
  3. Бос орны бар атаудан тырнақшаны алып тастасаңыз не өзгереді?

Жауап: бағдарлама сөздерін 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)

Әзірге пікір жоқ. Бірінші болыңыз.