Size: a a a

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

2020 September 18

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Вместо разных реализаций f1 и f2 лучше завести метод в трейте, который будет по разному реализован для разных типов, и в общем коде дергать его
+
источник

V

Vetro in Rust — русскоговорящее сообществo
вафель 🧇
#![feature(specialization)]

Добро пожаловать
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
вафель 🧇
#![feature(specialization)]

Добро пожаловать
Я не уверен что в этом кейсе специализация поможет
Оно со всех сторон неидиоматично)
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Я не уверен что в этом кейсе специализация поможет
Оно со всех сторон неидиоматично)
Специализация в данном случае отличный микроскоп!
источник

в🧇

вафель 🧇 in Rust — русскоговорящее сообществo
...для забивания гвоздей)
источник

V

Vladimir in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Я не уверен что в этом кейсе специализация поможет
Оно со всех сторон неидиоматично)
почему не поможет? Это ж какраз кейс под специализацию.
impl<U> Bla for U {
fn foo(self) {}
}
impl Bla for T<T1> {
fn foo(self) {f1(self)}
}
impl Bla for T<T2> {
fn foo(self) {f1(self)}
}
источник

(L

(((Mike Lubinets))) in Rust — русскоговорящее сообществo
Vladimir
почему не поможет? Это ж какраз кейс под специализацию.
impl<U> Bla for U {
fn foo(self) {}
}
impl Bla for T<T1> {
fn foo(self) {f1(self)}
}
impl Bla for T<T2> {
fn foo(self) {f1(self)}
}
Я так понял что f1 и f2 — свободные функции
источник

V

Vladimir in Rust — русскоговорящее сообществo
(((Mike Lubinets)))
Я так понял что f1 и f2 — свободные функции
Дак какая разница, трейт чисто чтоб вызвать f1 из f2.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Igor Gulamov
Есть тип T<I:Inner> и его имплементации`T<I1>, T<I2>`

Есть f1<I1>(T<I1>) -> T<I1> и f1<I2>(T<I2>) -> T<I2>`, реализованные полностью по разному, используя внутренние особенности I1 и I2.

Есть f2<I:Inner>(T<I>)->T<I>, не зависит явно от внутренних особенностей I1 и I2.

Как можно f1 вызвать внутри f2?
Можно попробовать type_id посравнивать, но там вероятно придется трансмьютить. Это будет ансейфно, пусть и корректно.
источник

IG

Igor Gulamov in Rust — русскоговорящее сообществo
спасибо. Видимо, придется трейты писать для каждого слоя абстракции. И там, где важно Inner, делать кастомные имплементации
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Как из функции без параметров, вернуть slice или любой другой unsized объект?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
В стейбле никак.
Можно завернуть в Box.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Mikail Bagishov
В стейбле никак.
Можно завернуть в Box.
Но как понял, можно сделать только подобие ссылки на ссылку.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
используя Box
источник

Э

Эрик in Rust — русскоговорящее сообществo
Zymlex (Юрий)
Как из функции без параметров, вернуть slice или любой другой unsized объект?
Тебе ссылку на ?Sized надо вернуть?
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Эрик
Тебе ссылку на ?Sized надо вернуть?
Есть возможность? Для объекта требуется lifetime, обычно.
источник

D

Denis in Rust — русскоговорящее сообществo
чот по-моему xy-problem
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
Мне больше из интереса на будущее.
источник

Z

Zymlex (Юрий) in Rust — русскоговорящее сообществo
unsized же обычно в куче?
источник

D

Denis in Rust — русскоговорящее сообществo
ну например так:
pub fn kek() -> Box<[u8]> {
   vec![1, 2, 3].into_boxed_slice()
}
источник