Входни данни, CLI
27 ноември 2018
Административни неща
Административни неща
- Домашно 2 приключи
Административни неща
- Домашно 2 приключи
- RustFest Rome!
Преговор
Event emitter
Преговор
Event emitter
- HashMap
Преговор
Event emitter
- HashMap
- Връщане и съхраняване на функции
Преговор
Event emitter
- HashMap
- Връщане и съхраняване на функции
- impl Trait
Преговор
Event emitter
- HashMap
- Връщане и съхраняване на функции
- impl Trait
- Borrow
Преговор
Event emitter
- HashMap
- Връщане и съхраняване на функции
- impl Trait
- Borrow
- TCP demo
Преговор
Event emitter
- HashMap
- Връщане и съхраняване на функции
- impl Trait
- Borrow
- TCP demo
- Една торба ръбове и фиксове
Домашно 2
Demo
Домашно 2
Demo
- floating-point сравнения
Данни за играта?
Данни за играта?
- От предефиниран път на системата --
$HOME/.hangman_words.txt
(dirs::home_dir
, от пакета dirs)
Данни за играта?
- От предефиниран път на системата --
$HOME/.hangman_words.txt
(dirs::home_dir
, от пакета dirs) - От аргументите на командния ред --
$ hangman wordlist.txt
(std::env::{args, args_os}
)
Данни за играта?
- От предефиниран път на системата --
$HOME/.hangman_words.txt
(dirs::home_dir
, от пакета dirs) - От аргументите на командния ред --
$ hangman wordlist.txt
(std::env::{args, args_os}
) - Вградени в binary-то (
include_str!
,include_bin!
)
Локално инсталиране на пакет
Локално инсталиране на пакет
cargo install
, а ако вече е било викнато,cargo install --force
Локално инсталиране на пакет
cargo install
, а ако вече е било викнато,cargo install --force
- Инсталира нещата в
~/.cargo/bin/
Локално инсталиране на пакет
cargo install
, а ако вече е било викнато,cargo install --force
- Инсталира нещата в
~/.cargo/bin/
hangman wordlist.txt
Debug-ване
ENV vars
1
2
3
4
5
6
7
8
pub fn clear_screen() {
if env::var("DEBUG").is_ok() {
return;
}
print!("{}[2J", 27 as char);
print!("{}[1;1H", 27 as char);
}
1
2
$ DEBUG=1 cargo run some-file.txt
$ DEBUG=1 hangman some-file.txt
По-сложна обработка на аргументи чрез structopt
1
2
3
4
[dependencies]
rand = "*"
structopt = "*"
structopt-derive = "*"
По-сложна обработка на аргументи чрез structopt
1
2
3
4
$ hangman --wordlist=words.txt --attempts=10 --debug
$ hangman -w words.txt -a 10 -d
$ hangman --help
$ hangman --version
По-сложна обработка на аргументи чрез structopt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
extern crate structopt;
#[macro_use]
extern crate structopt_derive;
use structopt::StructOpt;
#[derive(StructOpt, Debug)]
#[structopt(name="hangman", about="A game of Hangman")]
pub struct Options {
#[structopt(short="w", long="wordlist", help="The path to a word list")]
wordlist_path: Option<String>,
#[structopt(short="a", long="attempts", help="The number of attempts to guess the word", default_value="10")]
attempts: u32,
#[structopt(short="d", long="debug", help="Show debug info")]
debug: bool,
}
Ограничения на structopt
Ограничения на structopt
- Трудно дебъгване на грешки (доста магия)
Ограничения на structopt
- Трудно дебъгване на грешки (доста магия)
- Липса на гъвкавост?
Ограничения на structopt
- Трудно дебъгване на грешки (доста магия)
- Липса на гъвкавост?
- В краен случай, може би решението е (използвания отдолу пакет) clap
Още полезни пакети
Още полезни пакети
- clap -- по-сложен command-line parsing, мощен, доста за четене
Още полезни пакети
Още полезни пакети
- clap -- по-сложен command-line parsing, мощен, доста за четене
- path -- Заместител на
env::home_dir
, дава достъп до системни директории - lazy_static -- дефиниране на константи с код
Още полезни пакети
- clap -- по-сложен command-line parsing, мощен, доста за четене
- path -- Заместител на
env::home_dir
, дава достъп до системни директории - lazy_static -- дефиниране на константи с код
- serde -- за писане и четене на структурирани данни