KlonD90
ну непонятно самое первое. почему эта функция требует lifetime explicit?
Cuno
Вообще говоря не требует
Cuno
А, интересно
KlonD90
= help: this function's return type contains a borrowed value, but the signature does not say whether it is borrowed from x or y
պլհկ
потому что две ссылки
Cuno
Да, в этом случае lifetime elision не работает.
Cuno
Компилятор не всегда способен вывести lifetime, поэтому его иногда нужно указывать явно.
KlonD90
в случае если я внутри ввожу несколько ссылок и возвращаю одну из них мне нужно указывать lifetime?
Cuno
Да, в случае когда у функции несколько параметров-ссылок.
Anonymous
а можно &str сконсьюмить?
Cuno
Что значить сконсьюмить?
Berkus
можно сконсьюмить ссылку по идее
Anonymous
consume
Cuno
consume
И что это должно значить?
Anonymous
забрать владение?
Cuno
Нет, нельзя
Cuno
Это невладеющий тип
Cuno
у него нечего забирать :)
Cuno
он сам строкой не владеет
Anonymous
а кто владеет
Cuno
String
Cuno
(в большинстве случаев)
Anonymous
а причем тут String?
Cuno
При том, что &str это пара указатель + длина
Cuno
при этом указатель указывает на какие-то данные внутри String
Cuno
Собственно, именно поэтому нельзя, чтобы &str пережил соответствующий String - в таком случае мы получим висячий указатель.
Cuno
Который указывает на освобожденную память
KlonD90
но я не совсем понимаю что значит 'a
Anonymous
KlonD90
т.к. string1 живет дольше string2
պլհկ
кто владеет &'static str?🤔🤔🤔
Cuno
Cuno
Я же написал, что в большинстве случаев.
Cuno
В случае литерала указатель указывает на статические данные
KlonD90
ну я скорее не про название. а то что 1 элемент живет дольше другого по коду. результат конечно живет столько же сколько 2ой но явно у 1го из параметров лайфтайм больше. но они все обозначены как 'a.
Alex
Alex
но я не совсем понимаю что значит 'a
'a 'b и т.д, это просто типа x / y в математике. Ты если у тебя в двух местах 'a значит у тебя оба этих куска должны жить одинаково, если у тебя 'a и 'b аргумент, значит они живут разное время.
Alex
Это кривое объяснение конечно.
KlonD90
KlonD90
но вот тут string1 выше объявлен
Alex
у тебя x, y и результат должны жить одинаковое время
Alex
кроме того ты судя по всему пытаешься забрать владение
KlonD90
спасибо
Cuno
https://play.rust-lang.org/?gist=bbf70b3f797470b7b0dcb8979c464a09&version=stable
Cuno
Я полагаю вопрос почему такое компилируется?
Anonymous
Cuno
'a в этом случае это лайфтайм меньшего скоупа.
Alex
Alex
оси у нас вроде в геометрии, не?
Anonymous
в геометрии другое использование осей
adam
Рентген один из примеров
Anonymous
ну "'a 'b и т.д, это просто типа x / y в математике"
Berkus
ска, бороу чекер злой!
Berkus
cannot borrow immutable indexed content as mutable
внезапный вопрос, как мне мутабить значения внутри контейнеров, через get_mut() только?
Loo
Berkus
в основном тут HashMap-ы
Anonymous
а в чем проблема использовать get_mut()
Berkus
ни в чём, просто спрашиваю
Loo
в основном тут HashMap-ы
только так в основном да. ещё можно итерироваться мутабельно. либо сремувить из хэшпамы - получить его владение и сделать мутабельной ссылкой, мутить, обратно ложить, но это уже гавно
Berkus
ага, понял
Igor
Кто-нибудь использует VSCode для Rust?
Как бы билдите проект?
Anonymous
cargo build?
Stanislav
Igor
cargo build?
Ну да, вызываю через >Cargo: Build
А как стандартную команду Build приклеить вызов ( >Tasks: Run Build Task )
Не понятно что надо добавить в tasks.json.
Filipp
у меня плагин сам добавил
պլհկ
Самый хайповый rust (rls)
Anton
Berkus
Berkus
"tasks": [
{
"taskName": "Cargo build",
"type": "shell",
"command": "cargo build",
"group": {
"kind": "build",
"isDefault": true
}
}
]
Berkus
Berkus
rls работает у меня нормально
Berkus
какой регекс еще
Igor
какой регекс еще
Который "problemMatcher" в tasks.json
Плагин пока еще качает зависимости, сейчас заценю.
պլհկ
Рлс сам проблемы показывает
պլհկ
Билдить не надо
Berkus
Berkus
это типа чтобы даблкликать вывод билдера и переходить к ошибке?