Mehul
Hello Rustaceans,
Rust Hacks Team has initiated Open Design repo to help with Rust related design resources.
You can find all the Rust related design resources here or can request for designs for your upcoming events, campaigning, meetups, etc.
https://github.com/rusthacks/OpenDesign
Cheers!
Kerrigan
kitsu
https://os.phil-opp.com/second-edition/
кажется еще не было
Sergey
Alex
Существует ли возможность добавить для &[u8] кастомный метод?
Sergey
պլհկ
impl MyTrait for
доня.
можно примерчик? что то ничего не нашел
trait Foo {
fn custom_method(&self) -> i32;
}
impl Foo for [u8] {
fn custom_method(&self) -> i32 {
42
}
}
fn main() {
println!("{}", &[1, 2, 3].custom_method());
}
Alex
мне нужно внутри метода получить доступ к слайсу для которого это применено
պլհկ
Пример -> play
Sergey
Sergey
Alex
а, сорян
Alex
лоханулся ((
Alex
так стоп, я написал &[u8]
Alex
это слайс
պլհկ
И что ты не можешь сделать?
Alex
не получается добавить метод где я смогу получать доступ к элементам слайса. Т.е хочу по индексу u8 получать
доня.
impl Foo for [u8] {
fn custom_method(&self) -> u8 {
let mut sum = 0;
println!("{}", self[0]);
for x in self {
sum += x * x;
}
sum
}
}
вот тебе доступ к элементам, или я чего-то не понимаю, или проблемы нет
Alex
если не абстрактно то хочу написать метод для чтения сишных строк, т.е из байтов до нульбайта.
պլհկ
Такой метод уже есть
պլհկ
В систринге
պլհկ
И?
Alex
ну ансейф типа
Alex
я размер строки не знаю. Есть &[u8], я по определенному offset хочу прочитать всю строку до нульбайта.
Alex
Но не больше.
Alex
и хотел удобный метод накидать.
պլհկ
https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul
Alex
Alex
стоп, это бесполезная функция. Мне надо строчку до нульбайта прочесть
Alex
т.е я не хочу отдельно считать в какой позиции там нульбайт, потом снимать слайс и т.д.
Alex
https://play.rust-lang.org/?gist=94e0b9d4b6ebb3f24883c763bf8b010c&version=stable
Вот так хочу. Но не работает
Anonymous
Anonymous
https://doc.rust-lang.org/book/first-edition/traits.html
доня.
Alex
https://play.rust-lang.org/?gist=b0ad2d88b2b718498fb2938d3df01a69&version=stable
no method named `custom_method` found for type `&'static [u8; 5]` in the current scope
Мне что для каждого размера придется это объявлять?
Anonymous
Alex
ухты.
Anonymous
А с размерами да, печаль. const generic пока не завезли. Так что если захочешь трейт для именно для массива заимплементить, то надо для каждого размера это делать. Макросы немного помогают, но это костыльое решение.
Alex
Alex
https://play.rust-lang.org/?gist=8e2c41a0d8732fd5a681ca5944902a2e&version=stable
Не очень красиво, но сделал. Вроде работает. Спасибо.
Alex
как в расте вывести [u8] строкой игнорируя все непечатамые символы?
Сергей
iter().filter(is_printable).to_string()
Alex
оо, спасибо.
Сергей
это сильно примерно. там ещё юникод учесть по идее
Alex
юникод не нужен, ascii хватит
Alex
я формат файла байтоебствую.
Сергей
так это надо самому решить, что для тебя printable что нет
Alex
отлично!!
kitsu
ну и не принтабл будут печататься
Alex
хочу видеть если есть какой ascii, файл анализирую.
Денис
вы чё, одумайтесь!
Денис
https://en.wikipedia.org/wiki/ASCII#Printable_characters
Alex
для дебага.
Денис
Codes 20hex to 7Ehex, known as the printable characters
Alex
Αλεχ
Maxim
всем привет, хотел спросить, как std::rc::Rc получает доступ к внутренним полям структуры, которая содержится внутри? Это какой-то ситаксический сахар, который на этапе компиляции преобразуется, или что?
Aleksey
Maxim
big
именно так и работает
big
Когда аллоцируешь Rc<T>, то выделяется место под T и счетчики.
Так вот Deref возвращает указатель на место где начинается T.
big
Deref это и есть по сути синтаксический сахар, который преобразует автоматически rc.foo() в T::foo(rc.deref())
Aleksey
спасибо @pepyakin!
big
Andrew
Alex
Денис
хочу видеть если есть какой ascii, файл анализирую.
Alex
мне и юникод не нужен ))
Alex
в питоне просто классный repr(), искал что то такое же для раста
Денис
кстати мб тебе больше подойдёт https://doc.rust-lang.org/std/string/struct.String.html#method.from_utf8_lossy
Денис
хотя
Денис
не, забей)