Size: a a a

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

2020 September 30

Э

Эрик in Rust — русскоговорящее сообществo
источник

m

mAX in Rust — русскоговорящее сообществo
Эрик
Никак. Только Into<u64>.
блин, не получается красивого решения тогда.. печаль)
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
mAX
Товарищи, подскажите пожалуйста)
Как можно указать требование чтобы трейт на T смог кастоваться из u64 через as?
struct Data<T>(T);
impl<T: Sized> Data<T> {
   fn new(val: u64) -> Self {
       Self(val as T)
   }
}
fn main() {
   Data::<u8>::new(0_u64);
}

Вот хотелось бы как-то указать что T должен уметь val as T, где val u64
Есть либа num-traits вроде, там есть трейт для примитивного каста
источник

Э

Эрик in Rust — русскоговорящее сообществo
Просто сделай assert!(range.start == range.end);
источник

в🧇

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

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Просто сделай assert!(range.start == range.end);
.len() == 0 для слабаков?
источник

Э

Эрик in Rust — русскоговорящее сообществo
вафель 🧇
.len() == 0 для слабаков?
Там минус делается.
источник

m

mAX in Rust — русскоговорящее сообществo
Andrey Vlasov
Есть либа num-traits вроде, там есть трейт для примитивного каста
значит они как-то смогли наложить ограничение.. попробую посмотреть)
мне интересно как это сделано
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Эрик
Там минус делается.
(:
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
mAX
значит они как-то смогли наложить ограничение.. попробую посмотреть)
мне интересно как это сделано
Руками имплементировали, или макросами, скорее всего
источник

m

mAX in Rust — русскоговорящее сообществo
Andrey Vlasov
Руками имплементировали, или макросами, скорее всего
а как это можно имплементировать?
допустим для некоторого набора типов.. только u8, u16, u32
источник

Э

Эрик in Rust — русскоговорящее сообществo
mAX
а как это можно имплементировать?
допустим для некоторого набора типов.. только u8, u16, u32
Macro power!
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
mAX
а как это можно имплементировать?
допустим для некоторого набора типов.. только u8, u16, u32
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Скинул ссылку не на тот трейт. Тебе нужен вот этот: https://docs.rs/num-traits/0.2.12/num_traits/cast/trait.AsPrimitive.html
И баунд where u64: AsPrimitive<T>
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
(Надеюсь, так можно баунды писать)
источник

m

mAX in Rust — русскоговорящее сообществo
Спасибо!
Вот рабочий пример сделал
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=6ff31b37a4a3718eaf441c528af9f26e

where T: num_traits::FromPrimitive
let val: T = num_traits::FromPrimitive::from_u64(0_u64).unwrap();

Но, такое ощущение что это уже не на этапе компиляции преобразуется
откуда тогда Option, зачем он вообще нужен
источник

m

mAX in Rust — русскоговорящее сообществo
хочется понять можно ли сделать чтобы все проверялось на этапе компиляции, а не в рантайме
источник

Э

Эрик in Rust — русскоговорящее сообществo
mAX
хочется понять можно ли сделать чтобы все проверялось на этапе компиляции, а не в рантайме
Можно. Берёшь Into<u64> + IsPrimitive какой-нибудь.
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Эрик
Можно. Берёшь Into<u64> + IsPrimitive какой-нибудь.
Что такое IsPrimitive?
источник