Алексей
http://rurust.github.io/rust_book_ru/src/patterns.html
Vladimir
откуда инфа
всмысле, так всегда в насте можно матчить на _
Vladimir
никаких особых правил нету для _
Vladimir
это не магия "черной дыры"
Anonymous
ну это специальный синтаксис ток для паттернов
Anton
ps: _ это тоже переменная, только без имени
Интересно что будет когда он встертит match x { Ok(_) => ... Err(_) => ... }
Алексей
а с этим полный порядок кстати :)
Алексей
match conn.execute("create database ....", &[]) { Ok(e) => { println!("База данных создана. ") } Err(e) => println!("Ошибка базы данных: {}", e) }
Алексей
и даже ошибки из перечисления обрабаываются :)
Vladimir
ну это специальный синтаксис ток для паттернов
я к тому, что никакого дополнительного смысла он не несет, нежели "безимянная переменная" и не нужно его проговаривать отдельно
Anton
а с этим полный порядок кстати :)
Ну так тоже самое просто без Err() при Err(e) матчится на тег и значение вписывается в 'e', теперь убери Err - значение запишет в 'e'
Vladimir
вот например .. несёт х)
分解物質
И причем они к го
ненадо, они там о скорости заботятся
Anton
в твоем случае лучше наверно юзать if
Anton
match оставь для enum
Anonymous
но не всегда
Anonymous
с ленивыми итераторами например
Anton
в твоем случае лучше наверно юзать if
https://play.rust-lang.org/?gist=3a57db3e68402e07e0671e8f55b65c34&version=stable
Anonymous
и отключает варнинги
Anonymous
еще
Vladimir
и отключает варнинги
варнинги отключает и _sda
Vladimir
а что за ленивые итераторы
Anton
кстати, я хотел бы признатся =)
Anton
я не читал rust-book =)
Anonymous
ну если ты просто напишешь (0..30).map(|x| println!("{:?}", x)); то у тебя ничего не напишется же
Vladimir
и юзать нужно инспект
Anonymous
let _ = юзать нужно
Vladimir
он кстати разве ленивый?
Vladimir
мне вот интересно как он потом будет понимать что-то типа enum SomeEnum { SomeVar (u32), OtherVal {x: u32, y: i32}, } use SomeEnum::*; fn main() { let x = OtherVal{x:32, y:43}; match x { x @ SomeVar(1...2) => println!("{}", 32) , OtherVal{x:x @ 43, ..} => println!("{}",x), _ => println!("{}", 42), } }
Алексей
https://play.rust-lang.org/?gist=3a57db3e68402e07e0671e8f55b65c34&version=stable
наверное всё таки правильно теперь буду match юзать, и в случае косяков читать оригинал книги на англиском... ну кто же мог подумать, что в русском переводе весь абзац с этим примеров выбросят то?
Vladimir
inspect, но забей, ответ - да
Anonymous
инспект не нужен
Vladimir
инспект не нужен
ты ж ток шо пример показал где нужен )
Vladimir
принтлн в мапе блин
Vladimir
фу
Vladimir
Vladimir
и что
для этого инспект и нужен
Anton
кстати можно
match foo { bar if bar == variable => {} }
Алексей
для этого инспект и нужен
шаблон сравнивает по условиям , 42 выведет из _
Vladimir
чтоб не был {println!(..); x}
Anonymous
для этого инспект и нужен
он нужен только для hacky решений
Anonymous
и дебаггинга
Vladimir
и дебаггинга
а твой принтлн в мапе не дебагинг
Vladimir
и вообще, ты вроде за функциональщину топил
Anonymous
а твой принтлн в мапе не дебагинг
это пример ленивости просто
Vladimir
от мапа с сайд эффектами кровь из глаз не течет?
Vladimir
а какой любишь
Anonymous
а какой еще есть
Vladimir
шаблон сравнивает по условиям , 42 выведет из _
Но там же "х" в матче, почему не сравнивает с строкой х
Anonymous
детерминизм это хорошо
Anonymous
но имо "функция без сайд эффектов" это оксюморон
Алексей
Но там же "х" в матче, почему не сравнивает с строкой х
там же нету строк для сравнения , там условия (не помню как их в книге называют)
Алексей
Но там же "х" в матче, почему не сравнивает с строкой х
или хочешь сказать что мои d и y он так же за условия принял ? (а не за строку?)
Anton
Разговор по кругу
Vladimir
Там до конструкции @ всё одинаково в первом условии
Vladimir
А конструкция @ лишь уточняет при каких значениях матчить
Anonymous
match 37 { [0, 0, 1, 0, 0, 1, 0, 1] => {} _ => {} } почему не работает
Vladimir
(((
Алексей
всем спасибо за пояснения. Интересно что будет следующим? строки здесь крутые, case крутые...
Anonymous
а что будет если написать a @ b
Anonymous
или на месте б нельзя новые переменные
Vladimir
Новые вряд-ли
Vladimir
Вот тут какраз та фишка со старыми может прокатить
Anonymous
лолл
Anonymous
не могу потестить
Vladimir
pattern bindings are not allowed after an @
Vladimir
все-таки в иф пихать надо