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!
kitsu
https://os.phil-opp.com/second-edition/ кажется еще не было
Alex
Существует ли возможность добавить для &[u8] кастомный метод?
Alex
Только через трейт
можно примерчик? что то ничего не нашел
պլհկ
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
impl MyTrait for
у меня так не получается работать с &self
Alex
мне нужно внутри метода получить доступ к слайсу для которого это применено
պլհկ
Пример -> play
Alex
Слайс это же не массив
но я его могу индексировать
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
ну ансейф типа
Alex
я размер строки не знаю. Есть &[u8], я по определенному offset хочу прочитать всю строку до нульбайта.
Alex
Но не больше.
Alex
и хотел удобный метод накидать.
պլհկ
https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul
Alex
https://doc.rust-lang.org/std/ffi/struct.CStr.html#method.from_bytes_with_nul
уу я лох. Спасибо большое. Весь день пишу код уже, туплю.
Alex
стоп, это бесполезная функция. Мне надо строчку до нульбайта прочесть
Alex
т.е я не хочу отдельно считать в какой позиции там нульбайт, потом снимать слайс и т.д.
Alex
https://play.rust-lang.org/?gist=94e0b9d4b6ebb3f24883c763bf8b010c&version=stable Вот так хочу. Но не работает
Anonymous
https://doc.rust-lang.org/book/first-edition/traits.html
доня.
https://play.rust-lang.org/?gist=94e0b9d4b6ebb3f24883c763bf8b010c&version=stable Вот так хочу. Но не работает
ну так правильно, у тебя трейт ничего не знает о том что Self это [u8]
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
https://play.rust-lang.org/?gist=b0ad2d88b2b718498fb2938d3df01a69&version=stable no method named `custom_method` found for type `&'static [u8; 5]` in the current scope Мне что для каждого размера придется это объявлять?
Ты же для слайса трейт имплементишь. Так и бери слайс от массива. https://play.rust-lang.org/?gist=d86525234219ace5f87395db7e3acbe7&version=undefined
Alex
ухты.
Anonymous
А с размерами да, печаль. const generic пока не завезли. Так что если захочешь трейт для именно для массива заимплементить, то надо для каждого размера это делать. Макросы немного помогают, но это костыльое решение.
Alex
https://play.rust-lang.org/?gist=8e2c41a0d8732fd5a681ca5944902a2e&version=stable Не очень красиво, но сделал. Вроде работает. Спасибо.
Alex
как в расте вывести [u8] строкой игнорируя все непечатамые символы?
Сергей
iter().filter(is_printable).to_string()
Alex
оо, спасибо.
Сергей
это сильно примерно. там ещё юникод учесть по идее
Alex
юникод не нужен, ascii хватит
Alex
я формат файла байтоебствую.
Alex
iter().filter(is_printable).to_string()
не могу найти где лежит is_printable, оно private
Сергей
так это надо самому решить, что для тебя printable что нет
kitsu
не могу найти где лежит is_printable, оно private
https://doc.rust-lang.org/std/primitive.char.html#method.escape_default есть вот такая штука, но тогда надо будет вначале мапить в чар
Alex
отлично!!
kitsu
ну и не принтабл будут печататься
Alex
ну и не принтабл будут печататься
я прочто не хочу видеть убогое [233, 232, 232]
Alex
хочу видеть если есть какой ascii, файл анализирую.
Денис
вы чё, одумайтесь!
Денис
https://en.wikipedia.org/wiki/ASCII#Printable_characters
Alex
для дебага.
Денис
Codes 20hex to 7Ehex, known as the printable characters
Maxim
всем привет, хотел спросить, как std::rc::Rc получает доступ к внутренним полям структуры, которая содержится внутри? Это какой-то ситаксический сахар, который на этапе компиляции преобразуется, или что?
big
именно так и работает
big
Когда аллоцируешь Rc<T>, то выделяется место под T и счетчики. Так вот Deref возвращает указатель на место где начинается T.
big
Deref это и есть по сути синтаксический сахар, который преобразует автоматически rc.foo() в T::foo(rc.deref())
Aleksey
спасибо @pepyakin!
big
Andrew
Codes 20hex to 7Ehex, known as the printable characters
О, символы национальных локалей по пизде пошли
Денис
хочу видеть если есть какой ascii, файл анализирую.
Alex
мне и юникод не нужен ))
Alex
в питоне просто классный repr(), искал что то такое же для раста
Денис
кстати мб тебе больше подойдёт https://doc.rust-lang.org/std/string/struct.String.html#method.from_utf8_lossy
Денис
хотя
Денис
не, забей)