These are chat archives for dev-ua/rust

30th
Oct 2015
Stanislav Ivanov
@ivstas
Oct 30 2015 15:52

Добрый вечер.
Объясните плиз:
Есть вектор: let vec = vec![0,1,2,3];

Почему оба варианта работают:
for v in &vec {println!("{}", v+1);}
for v in &vec {println!("{}", *v+1);}

И в чем разница for v in &vec и for v in vec?
Andrey Lesnikov
@ozkriff
Oct 30 2015 15:57
for v in vec поглащает вектор - http://is.gd/FaOfbM
Stanislav Ivanov
@ivstas
Oct 30 2015 15:59
@ozkriff т.е. берет во владение?
Michael Pankov
@mkpankov
Oct 30 2015 15:59
работают оба потому что авторазыменование, насколько я помню
Stanislav Ivanov
@ivstas
Oct 30 2015 16:00
@mkpankov это фишка цикла for in?
Michael Pankov
@mkpankov
Oct 30 2015 16:00
нет, это везде
на самом деле надо вспомнить как сложение определенно
Andrey Lesnikov
@ozkriff
Oct 30 2015 16:01
http://is.gd/fgWEt0 - прикольно, я не знал)
Michael Pankov
@mkpankov
Oct 30 2015 16:02
оно может и ссылку и значение принимать, а возвращать всегда значение
Stanislav Ivanov
@ivstas
Oct 30 2015 16:02
@mkpankov т.е. везде, где я использую reference, мне не нужно писать *v, т.к. будет разыименование
Michael Pankov
@mkpankov
Oct 30 2015 16:02
тогда и авторазыменование не надо
Stanislav Ivanov
@ivstas
Oct 30 2015 16:03
всмысле компилятор автоматом поймет, что нужно получить данные по ссылке
а не прибавлять число к указателю :)
@mkpankov спасибо
Michael Pankov
@mkpankov
Oct 30 2015 16:05
всё проще короче, типаж сложения определён и на ссылках и на значениях
а возвращает всегда значение