Size: a a a

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

2020 October 25

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Это не так. Я занимаю один раз и отдаю, потом занимаю второй раз и отдаю.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Maxim Bogdanov
Это не так. Я занимаю один раз и отдаю, потом занимаю второй раз и отдаю.
Неа, мутабельная ссылка живёт до конца текущего стейтмента😁
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Либо где тогда сказано, что раст рассматривает целиком стейтментькак строку, а не как дерево при анализе.
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
polunin.ai
Неа, мутабельная ссылка живёт до конца текущего стейтмента😁
Хмм, а есть где почитать?
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Я обыскался
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Maxim Bogdanov
Хмм, а есть где почитать?
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Maxim Bogdanov
нельзя:
a.test(a.test(1));
можно:
let res = a.test(1);
a.test(res);

хотелось бы конечно понять логику, почему так
А a.test({ a.test(1) }); компилится?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
В исходниках читай😁
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Единица проверки борроу чекера это стейтмент, как я понял
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Можно было сделать экспрешен но тогда время компиляции возросло бы, и сложность борроу чекера
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Просто добавь новую переменную и все
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
понял (не понял, на самом деле, пока просто буду иметь ввиду). Добавлю ещё переменную. Попробую подумать на досуге ещё, почему такое может быть.
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Maxim Bogdanov
понял (не понял, на самом деле, пока просто буду иметь ввиду). Добавлю ещё переменную. Попробую подумать на досуге ещё, почему такое может быть.
Попробуй спросить в дискорде раста, там думаю ответят максимально точно. И не забудь прислать сюда ответ.
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Окей :)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Maxim Bogdanov
подскажите плз, почему нельзя делать так: https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=e95e347eb66e54a4c4a36ac809265c3a

cannot borrow `*a as mutable more than once at a time

но прикол же в том, что выражение в скобках выполняется по-очереди и всё, что занималось, должно отдаваться и в итоге код этот должен работать.

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

Э

Эрик in Rust — русскоговорящее сообществo
Как пример:
fn foo(&mut self) {
let s = self;
{ let q = self; *q = 0; }
*s += 1;
}


Для программиста очевидно, что надо просто поменять местами две первые строчки, но компилятор не настолько умный.
источник

M

Maxim Bogdanov in Rust — русскоговорящее сообществo
Спасибо, вроде логично
источник

IA

Intemoc Aru'Nesh in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
@intemoc ради эксперимента выключил автоматический вызов rustfmt и временно убрал .editorconfig (у него приоритет перед настройками ide) - еретические настройки из code style вполне себе применяются
У меня нет EditorConfig плагина. Выставил два пробела, в превьюшке всё правильно, но код форматируется через четыре пробела.
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
struct I;
const i: I = I;
struct J;
const j: J = J;
struct K;
const k: K = K;

impl Add<i32> for I;
impl Add<Quat> for I;

impl Add<i32> for J;
impl Add<Quat> for J;

//...
источник

AV

Andrey Vlasov in Rust — русскоговорящее сообществo
Mikail Bagishov
struct I;
const i: I = I;
struct J;
const j: J = J;
struct K;
const k: K = K;

impl Add<i32> for I;
impl Add<Quat> for I;

impl Add<i32> for J;
impl Add<Quat> for J;

//...
Не лучше сделать const i: Quat = Quat::new(0, 1, 0, 0);?
источник