Size: a a a

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

2020 September 16

Э

Эрик in Rust — русскоговорящее сообществo
А если тебе имя типа надо, то std::any::type_name.
источник

b

in Rust — русскоговорящее сообществo
если да - то в teacher пишешь use crate::models::????
или crate::models::Model::new()
источник

E

Evgeniy in Rust — русскоговорящее сообществo
если да - то в teacher пишешь use crate::models::????
или crate::models::Model::new()
Спасибо))))
источник

b

in Rust — русскоговорящее сообществo
Evgeniy
Спасибо))))
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
Имя типа есть, имени переменной нет, разве что stringify!(x), но он тебе и выдаст что ты в него положишь (то есть "x").
Спасибо, прям то, что надо.
источник

E

Evgeniy in Rust — русскоговорящее сообществo
Спасибо большое))
источник

f

folex in Rust — русскоговорящее сообществo
Есть ли какой-то способ использовать slice patterns на векторе так, чтобы получить доступ к owned значениям?

fn take_inner(i: Inner) {}

let protocols = vec![Protocol::A(Inner{}), Protocol::B];
let owned_inner = match protocols.as_slice() {
   [Protocol::A(inner), Protocol::B] => inner,
   _ => return
};
take_inner(owned_inner)
 // expected struct Inner, found &Inner

https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=425a050c17838c7de86e6fb007014fe4
источник

f

folex in Rust — русскоговорящее сообществo
По хорошему мне бы сделать => *inner, тк слайс никогда использоваться больше не будет. Но как доказать это компилятору, я не знаю
источник

Э

Эрик in Rust — русскоговорящее сообществo
Не использовать slice pattern на том, что не слайса?
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Если значение известно на момент компиляции, obj as TYPE будет сразу преобразовано в требуемый тип? или же требуется сборка с оптимизацией? Или же эта операция только для рантайма?
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Если значение известно на момент компиляции, obj as TYPE будет сразу преобразовано в требуемый тип? или же требуется сборка с оптимизацией? Или же эта операция только для рантайма?
Если ты делаешь 0 as u64 то перестань, а начни писать 0u64.

А так — должно оптимизироваться как ты хочешь. Если не уверен — запихни в константу.
источник

Э

Эрик in Rust — русскоговорящее сообществo
if protocols.len() == 2 && protocols[1] == Protocol::B {
match protocols.into_iter().next().unwrap() {
 Protocol::A(inner) => inner,
 _ => return,
}
}
источник

f

folex in Rust — русскоговорящее сообществo
Эрик
Не использовать slice pattern на том, что не слайса?
раньше мне хватало ссылки, а теперь понадобилось вынимать значение
источник

f

folex in Rust — русскоговорящее сообществo
и по сути-то ссылка не shared
источник

f

folex in Rust — русскоговорящее сообществo
с slice pattern просто выходит сильно читабельнее
источник

f

folex in Rust — русскоговорящее сообществo
Я как бы и ссылку-то не могу вернуть, тк protocols создается внутри функции -_-
источник

f

folex in Rust — русскоговорящее сообществo
оно как ни пиши всё выходит через жэ(
источник

Э

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

Э

Эрик in Rust — русскоговорящее сообществo
Можно просто let first = None; let second = None; let more_than_two = false;, и потом эти штуки матчить.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Ещё и без аллокаций будет.
источник