Size: a a a

Rust — русскоговорящее сообщество

2021 June 22

B

Börgar in Rust — русскоговорящее сообщество
imagine not having specialization
this post is made by nightly gang
источник

LM

L M in Rust — русскоговорящее сообщество
Доброе утро\день\вечер всем. Есть такой вопрос (скорее всего, тупой). Как заматчить значение к энаму красиво ?  Есть вот такое вот порно, но оно мне совершенно не нравится:
enum Numbers {
   Nums(i32, i32, i32),
}

fn main() {
   let Numbers::Nums(x1, x2, x3) = Numbers::Nums(1, 2, 20);

   let x = 20;

   match x {
       x if (x == x1 || x == x2 || x == x3) => {
           println!("aha, got'em")
       }
       _ => {}
   }
}
источник

goldstein опять in Rust — русскоговорящее сообщество
Ну, этот матч можно переписать на if
источник

A

Andrew in Rust — русскоговорящее сообщество
Исользовать метод contains
источник

AT

Alexander Tchitchigi... in Rust — русскоговорящее сообщество
Поскольку унификации в Rust нет — только гардами. 🤷‍♀️
источник

A

Andrew in Rust — русскоговорящее сообщество
If nums.contains(x)
Bla bla bla
источник

LM

L M in Rust — русскоговорящее сообщество
Да вот и проблема в том, что contains не подходит. Это просто пример. В ориджинал кодбазе несколько таких энамов  и их надо сматчить со значением :(
источник

LM

L M in Rust — русскоговорящее сообщество
Я так понимаю, либо плодить if'ы, либо гарды.
источник

LM

L M in Rust — русскоговорящее сообщество
Спасибо всем!
источник

L

Lya in Rust — русскоговорящее сообщество
x константа, или просто пример кривой?
Если да, то можно просто

match nums{
Numbers::Nums(20,20,20) => true,
- => false,
}
источник

NE

Nyc Enas in Rust — русскоговорящее сообщество
я думаю он нам слишком упрощенный пример кидает
источник

L

Lya in Rust — русскоговорящее сообщество
Аа, там или, тогда неправильно
источник

L

Lya in Rust — русскоговорящее сообщество
Так то можно деструктурить прямо в матче, но тоже не очень красиво
pub fn foo(nums:(u8,u8,u8),y:u8)->bool{
   match nums{
   (x,_,_) if x == y => true,
   (_,x,_) if x == y => true,
   (_,_,x) if x == y => true,
   _ => false,
   }
}
источник

LM

L M in Rust — русскоговорящее сообщество
Суть в том, что мне нужно заматчить не энам к велью, а велью к энаму, иф мейк сенс. Далее, я само велью в арме использую.
Чуть более развернутый пример :
use rand::Rng;

fn remux_audio(muxer: &Muxer, stream_index: i32) {}
fn remux_video(muxer: &Muxer, stream_index: i32) {}
fn remux_subtitles(muxer: &Muxer, stream_index: i32) {}

enum StreamIndexes {
   AudioStream(i32, i32),
   VideoStream(i32, i32),
}

fn main() {
   let StreamIndexes::AudioStream(audio_stream_0, audio_stream_1) =
       StreamIndexes::AudioStream(0, 1);
   let StreamIndexes::VideoStream(video_stream_0, video_stream_1) =
       StreamIndexes::VideoStream(2, 3);

   let mut rng = rand::thread_rng();
   let stream_index: i32 = rng.gen; // unknown in compile-time

   match stream_index {
       idx if (idx == audio_stream_0 || idx == audio_stream_1) => remux_audio(&muxer, idx),
       idx if (idx == video_stream_0 || idx == video_stream_1) => remux_video(&muxer, idx),
       _ => {}
   }
}
источник

GS

Georgy Shepelev in Rust — русскоговорящее сообщество
У тебя во втором ифе копипаста
источник

LM

L M in Rust — русскоговорящее сообщество
Поправил же )
источник

L

Lya in Rust — русскоговорящее сообщество
неа idx == video_stream_1 || idx == video_stream_1
источник

LM

L M in Rust — русскоговорящее сообщество
А, ну теперь точно поправил, лол
источник

А⚙

Антон ⚙️ in Rust — русскоговорящее сообщество
Мне кажется, или выбор случайного элемента массива тут подойдёт лучше?
источник

D

Denis in Rust — русскоговорящее сообщество
enum Numbers {
   Nums(i32, i32, i32),
}

fn main() {
   let Numbers::Nums(x1, x2, x3) = Numbers::Nums(1, 2, 20);

   let x = 20;

   if x == x1 || x == x2 || x == x3 => {
       println!("aha, got'em")
   }

}
как тебе такое илон маск?)
источник