Size: a a a

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

2020 October 27

SD

Sergey Duck in Rust — русскоговорящее сообществo
Привет! Есть ли какие нибудь крейты чтобы получить звук с микрофона и получить его частоту? Например как работает тюнер для струнных инструментов.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Maxim Bogdanov
pub trait Memory<T> {
   fn new(size: usize, max_size: usize, endianness: Endianness) -> Self;
   fn read_byte(&self, addr: usize) -> u8;
   fn write_byte(&mut self, addr: usize, val: u8);
   fn read_word<T>(&self, addr: usize) -> Result<T, Error>;
   fn write_word<T>(&mut self, addr: usize, val: T) -> Result<(), Error>;
}


вот последние два метода подразумевают, что длина может быть одной из u8, u16,u32,u64 соответственно.
impl Memory<u16> for Mem {
fn read_word(&self, addr: usize) -> Result<u16, Error>;

impl Memory<u32> for Mem {
fn read_word(&self, addr: usize) -> Result<u32, Error>;

И я хотел для каждого типа сделать явную реализацию, нежели пытаться сделать общую реализацию с плясками T
Но для разных реализаций выходит мне надо реализовывать каждый раз и другие методы read_byte, write_byte.
У тебя код неправильный. Ты два раза дженерик определяешь - в методе и в трейте.
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
polunin.ai
У тебя код неправильный. Ты два раза дженерик определяешь - в методе и в трейте.
а раст на это даже ворнинг не выдает?
источник

YM

Yaro M in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
а раст на это даже ворнинг не выдает?
всё легально
произойдет маскировка имени типа
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
ну фигово че. Если скрытие переменных в функции это ок, то например скрытие переменной поля или генериком на методе генерика на типе должно быть ворнином
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
хотя бы в клиппи
источник

K

Kitsu in Rust — русскоговорящее сообществo
Αλεχ Zhukovsky
ну фигово че. Если скрытие переменных в функции это ок, то например скрытие переменной поля или генериком на методе генерика на типе должно быть ворнином
клиппи должен уметь, если явно сказать
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
просто дефолт странный. Неужели частый кейс когда у меня генерик на типе Т и на функции тоже Т?
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
polunin.ai
У тебя код неправильный. Ты два раза дженерик определяешь - в методе и в трейте.
хм, а есть какой-то альтернативный способ перегрузить вот так вот? Или через type ?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Maxim Bogdanov
хм, а есть какой-то альтернативный способ перегрузить вот так вот? Или через type ?
Я думаю ты имел в виду
pub trait Memory<T> {
   fn new(size: usize, max_size: usize, endianness: Endianness) -> Self;
   fn read_byte(&self, addr: usize) -> u8;
   fn write_byte(&mut self, addr: usize, val: u8);
   fn read_word(&self, addr: usize) -> Result<T, Error>;
   fn write_word(&mut self, addr: usize, val: T) -> Result<(), Error>;
}
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
да, возможно, я ещё плаваю в расте, но в раст бегиннерс не всегда отвечают 🙂
источник

r

red75prime in Rust — русскоговорящее сообществo
Maxim Bogdanov
да, возможно, я ещё плаваю в расте, но в раст бегиннерс не всегда отвечают 🙂
А какой смысл должен быть? Память, у которой размер word совпадает с T, или память, из которой можно читать word разного размера?
источник

А

Александр in Rust — русскоговорящее сообществo
Подскажите, можно ли как-то указать для rls или ra чтобы они в оффлайне работали?
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
red75prime
А какой смысл должен быть? Память, у которой размер word совпадает с T, или память, из которой можно читать word разного размера?
ну идея сделать разные реализации шин памяти, да, с помощью генериков
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
для конкретных типов можно задавать различное поведение генериков а-ля
impl Point<f32> {
   fn distance_from_origin(&self) -> f32 {
       (self.x.powi(2) + self.y.powi(2)).sqrt()
   }
}

а для трейнтов я так и не понял, как их сверху можно наложить. Возможно через Type = …
источник

c

call eax in Rust — русскоговорящее сообществo
Maxim Bogdanov
для конкретных типов можно задавать различное поведение генериков а-ля
impl Point<f32> {
   fn distance_from_origin(&self) -> f32 {
       (self.x.powi(2) + self.y.powi(2)).sqrt()
   }
}

а для трейнтов я так и не понял, как их сверху можно наложить. Возможно через Type = …
impl Point for ???
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
call eax
impl Point for ???
ну вот у меня есть интерфкйс (трейт), есть какая-то структура с методом, который надо реализовать для нескольких типов. Я пока не понимаю, что нужно вставлять в ???
источник

c

call eax in Rust — русскоговорящее сообществo
Maxim Bogdanov
ну вот у меня есть интерфкйс (трейт), есть какая-то структура с методом, который надо реализовать для нескольких типов. Я пока не понимаю, что нужно вставлять в ???
Тип для которого нужно реализовать трейт с методом?
источник

ΑZ

Αλεχ Zhukovsky in Rust — русскоговорящее сообществo
Maxim Bogdanov
ну вот у меня есть интерфкйс (трейт), есть какая-то структура с методом, который надо реализовать для нескольких типов. Я пока не понимаю, что нужно вставлять в ???
impl Point for MyType
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Impl Point for MyType<u16> мне так надо
источник