Size: a a a

2020 December 16

АК

Александр Караев... in Rust Beginners
Yevhen Kazmin
Стоп, там же SliceIndex - трейт, поэтому в теории в функцию можно передать любую его имплемантацию. Поэтому оно и просит dyn. Можно сделать generic версию. (Сейчас плейграунд сделаю)
скорее всего generic мне и нужна :)
я не собираюсь этот трейт куда-то передавать, он исключительно для добавления метода-хелпера в &[u8]
источник

r

red75prime in Rust Beginners
Александр Караев
trait Foo {
   fn foo(self, index: std::slice::SliceIndex<Self, Output = ???>);
}

impl Foo for &[u8] {
  ???
}


вот это не могу заставить работать
Как-то так, но будет работать только в nightly https://play.rust-lang.org/?version=nightly&mode=debug&edition=2018&gist=45c6615dac5c4295af76c3f0e754b366
источник

АК

Александр Караев... in Rust Beginners
если можно обойтись без трейта, будет ещё лучше, но я не нашёл такой возможности
источник

K

Kitsu in Rust Beginners
Александр Караев
trait Foo {
   fn foo(self, index: std::slice::SliceIndex<Self, Output = ???>);
}

impl Foo for &[u8] {
  ???
}


вот это не могу заставить работать
trait Foo<T: ?Sized> {
   fn foo<I: SliceIndex<Self, Output = T>>(&self, index: I);
}

impl Foo<[u8]> for [u8] {
   fn foo<I: SliceIndex<Self, Output = [u8]>>(&self, index: I) {
       self.get(index);
   }
}
источник

АК

Александр Караев... in Rust Beginners
Kitsu
trait Foo<T: ?Sized> {
   fn foo<I: SliceIndex<Self, Output = T>>(&self, index: I);
}

impl Foo<[u8]> for [u8] {
   fn foo<I: SliceIndex<Self, Output = [u8]>>(&self, index: I) {
       self.get(index);
   }
}
спасибо, этот вариант подошёл
источник

AT

Alexander T in Rust Beginners
Всем привет. Как правильно найти пересечение всех сетов в векторе?
let mut result: HashSet<BigUint> = solutions
   .into_iter()
   .reduce(|x, y|
       x.intersection(&y).collect())
   .unwrap();

ругается на x.intersection().collect():
value of type std::collections::HashSet<num_bigint::BigUint> cannot be built from std::iter::Iterator<Item=&num_bigint::BigUint>
источник

AT

Alexander T in Rust Beginners
на случай проблемы XY опишу задачу: найти единственное общее число в векторе сетов. я их пересекаю и делаю result.drain().collect()[0]
источник

K

Kitsu in Rust Beginners
эм, reduce? мб все же fold?
источник

K

Kitsu in Rust Beginners
в общем нужно чуть больше инфы откуда этот метод, в itertools такого не помню
источник

AT

Alexander T in Rust Beginners
reduce из крейта reduce. с фолдом неудобно, нужно выделять первый элемент, итерироваться по остальным.
источник

K

Kitsu in Rust Beginners
а, окей
источник

K

Kitsu in Rust Beginners
intersection возвращает итератор по рефернсам, нужно их склонить, например: x.intersection(&y).cloned().collect()
источник

AT

Alexander T in Rust Beginners
Kitsu
intersection возвращает итератор по рефернсам, нужно их склонить, например: x.intersection(&y).cloned().collect()
референсы в ошибке поменялись
value of type &std::collections::HashSet<num_bigint::BigUint> cannot be built from std::iter::Iterator<Item=num_bigint::BigUint>
плюс вторая вылезла на unwrap:
expected struct std::collections::HashSet, found reference
источник

K

Kitsu in Rust Beginners
Ограничения reduce судя по сигнатуре. Можешь либо через какой-нибудь try_fold попробовать переделать, либо просто склонировать solutions
источник

Z

Zulqarnayn in Rust Beginners
https://doc.rust-lang.org/nomicon/ffi.html это как работает? к примеру мне нужно вызвать сишную функцию и она находится в example.dll. Как раст загружает эту библиотеку? мне нужно указать где она находится?
источник

Z

Zulqarnayn in Rust Beginners
Zulqarnayn
https://doc.rust-lang.org/nomicon/ffi.html это как работает? к примеру мне нужно вызвать сишную функцию и она находится в example.dll. Как раст загружает эту библиотеку? мне нужно указать где она находится?
или положит рядом? или прописать в  файл cargo?
источник

AT

Alexander T in Rust Beginners
починил, спасибо за помощь)
источник

K

Kitsu in Rust Beginners
Zulqarnayn
https://doc.rust-lang.org/nomicon/ffi.html это как работает? к примеру мне нужно вызвать сишную функцию и она находится в example.dll. Как раст загружает эту библиотеку? мне нужно указать где она находится?
Раст никак не загружает, нужно обязательно линковаться. Либо статически (читай при билде), либо искать где-то динамически (вариант с dll)
источник

d

diabolo in Rust Beginners
Zulqarnayn
https://doc.rust-lang.org/nomicon/ffi.html это как работает? к примеру мне нужно вызвать сишную функцию и она находится в example.dll. Как раст загружает эту библиотеку? мне нужно указать где она находится?
с dll тебе это не поможет, тебе нужен https://crates.io/crates/libloading
источник

K

Kitsu in Rust Beginners
diabolo
с dll тебе это не поможет, тебе нужен https://crates.io/crates/libloading
Вообще #[link(..)] должен уметь работать с dll-ками, не?
источник