Size: a a a

2020 November 09

KK

Kirill (Cykooz) Kuzm... in Rust Beginners
BSV
ребят, такой вопрос: допустим, у меня есть структура, описывающая изображение, содержащее поля width: i32, height: i32 и pixels: Vec<u8>
можно ли сделать так, чтобы содержимое вектора pixels можно было изменять, а сам вектор нельзя?
А почему ширина и высота описываются знаковыми типами данных? Они разве могут быть отрицательными?
источник

KK

Kirill (Cykooz) Kuzm... in Rust Beginners
BSV
ребят, такой вопрос: допустим, у меня есть структура, описывающая изображение, содержащее поля width: i32, height: i32 и pixels: Vec<u8>
можно ли сделать так, чтобы содержимое вектора pixels можно было изменять, а сам вектор нельзя?
В общем случае пиксели изображений могут быть представлены не одним вектором.
Видел подход, когда для записи пикселей у картинки реализуют метод, который принимает callback-функцию, которую внутри себя он вызывает для каждого пикселя. И передаёт в неё координаты пикселя (и можно ещё значение пикселя). Callback-функция должна вернуть новый цвет пикселя.
источник

NL

Nick Linker in Rust Beginners
BSV
ребят, такой вопрос: допустим, у меня есть структура, описывающая изображение, содержащее поля width: i32, height: i32 и pixels: Vec<u8>
можно ли сделать так, чтобы содержимое вектора pixels можно было изменять, а сам вектор нельзя?
В Rust мутабельность распространяется на все составляющие, если ты владеешь структурой, то можешь менять все её поля.
Эмулировать мутабельность отдельных полей можно через Cell/RefCell.
https://doc.rust-lang.org/1.30.0/book/first-edition/mutability.html#field-level-mutability

Но на мой взгляд гораздо лучше действовать на уровне модулей и видимости методов, и предоставлять такие функции и методы внешнему пользователю, которые сохраняют инварианты, а внутренности просто делать непубличными.
источник

АК

Алексей Колотвинов... in Rust Beginners
В одном из топиков расткона заявили, что после "недавних изменений в васм" можно веб приложения делать только с использованием васм/раст. Может в кратце кто нить объяснить, что за изменения? Дали прямой доступ к дом дереву и все браузерным апи?
источник

A

Adatan in Rust Beginners
А тут в закрепе была инфа для новичков, куда она пропала?
источник

d

diabolo in Rust Beginners
Adatan
А тут в закрепе была инфа для новичков, куда она пропала?
ага, по ходу не только у меня пропадало, это глюк после последнего обновления телеграма на андроиде)

https://t.me/rust_beginners_ru/58928
источник

A

Adatan in Rust Beginners
Лучший
источник

IB

Ivan Boldyrev in Rust Beginners
BSV
ребят, такой вопрос: допустим, у меня есть структура, описывающая изображение, содержащее поля width: i32, height: i32 и pixels: Vec<u8>
можно ли сделать так, чтобы содержимое вектора pixels можно было изменять, а сам вектор нельзя?
Можно превратить вектор в Box<[u8]> методом into_boxed_slice.
источник

А⚙

Антон ⚙️ in Rust Beginners
BSV
во многих либах можно написать use x::* и x::prelude::*
разницу не заметил, она, вообще, есть?
Есть, конечно.
Через use x::*; в текущее пространство имён втягиваются все публичные имена из x, а через use x::prelude::*; — все из x::prelude. И набор этих имён, разумеется, совпадать не обязан
источник

А⚙

Антон ⚙️ in Rust Beginners
BSV
если такое невозможно, то как это можно реализовать по-другому?
Если тебе нужно, чтобы размер pixels нельзя было поменять, то можно хранить бокс на слайс: Box<[u8]>. Но тогда тебе придётся при смене размера делать новую аллокацию
источник

DS

Dmitry Sokolov in Rust Beginners
diabolo
ага, по ходу не только у меня пропадало, это глюк после последнего обновления телеграма на андроиде)

https://t.me/rust_beginners_ru/58928
Несколько месяцев не обновлял телеграмм и ничего не пропало. 😂
источник

B

BSV in Rust Beginners
Kirill (Cykooz) Kuzminykh
А почему ширина и высота описываются знаковыми типами данных? Они разве могут быть отрицательными?
привычка с шарпа осталась, там инты
источник

SL

S. L. in Rust Beginners
зачем передавать в say() &self при имплементации(и в объявлении самого трейта) и почему он не передается при вызове?
источник

А⚙

Антон ⚙️ in Rust Beginners
S. L.
зачем передавать в say() &self при имплементации(и в объявлении самого трейта) и почему он не передается при вызове?
Для этой конкретной реализации self действительно не требуется, но наличие этого аргумента в форме self, &self или &mut self даёт возможность вызывать функцию в синтаксисе метода. А в примере использования &self таки передаётся. Хотя пример действительно странный.
источник

a

antuan in Rust Beginners
fn say(&self){println!("{}", self)}
источник

a

antuan in Rust Beginners
так, наверное, было бы нагляднее
источник

SL

S. L. in Rust Beginners
как правильно вывести в консоль структуру?
источник

АГ

Алексей Герасимов... in Rust Beginners
S. L.
как правильно вывести в консоль структуру?
навесить на нее #[derive(Debug)]
источник

А⚙

Антон ⚙️ in Rust Beginners
Алексей Герасимов
навесить на нее #[derive(Debug)]
И это, кстати, вроде даже компилятор говорит напрямую
источник

АГ

Алексей Герасимов... in Rust Beginners
не все привыкли читать ошибки компилятора
источник