Size: a a a

2020 March 02

QH

Quantum Harmonizer in KotlinLangRu
Mikhail Guryev
да, но лямбда в also выполняется ДО того, как функция foo завершится и вернёт значение. Выходит, что перед выполнением also создаётся копия объекта bar
Нет, выходит, что значение выражения bar, равное 1, передаётся в функцию also и ею возвращается. Копия, не копия — никакой роли не играет
источник

IM

Igor Mikhailov in KotlinLangRu
Насколько я понимаю
return bar.also {
 bar = null
}
на самом деле выглядит так:
return bar.also {it ->
 bar = null
 return@also it
}
То есть возвращаем мы не bar, а it (в котором старое значение bar)
источник

Z

Zaner in KotlinLangRu
Mikhail Guryev
как ещё объяснить, если не копией?
also разворачивется примерно в
val temp = a
lambda(a)
return temp      
                                                                                                                                                                                                           
в терминах с++:  
A* a = new A(4);                                                                                                                                                                    
A* const temp = a;
//lambda
{
 a = null;
}
return temp
источник

QH

Quantum Harmonizer in KotlinLangRu
Mikhail Guryev
как ещё объяснить, если не копией?
Забудь про «копии». Есть значения, выражения, переменные. Копий нет.
источник

MG

Mikhail Guryev in KotlinLangRu
Quantum Harmonizer
Забудь про «копии». Есть значения, выражения, переменные. Копий нет.
нет копий, понимаю
источник

Z

Zaner in KotlinLangRu
Quantum Harmonizer
Забудь про «копии». Есть значения, выражения, переменные. Копий нет.
ага а потом map, filter, reduce на неленивый список
источник

MG

Mikhail Guryev in KotlinLangRu
Zaner
also разворачивется примерно в
val temp = a
lambda(a)
return temp      
                                                                                                                                                                                                           
в терминах с++:  
A* a = new A(4);                                                                                                                                                                    
A* const temp = a;
//lambda
{
 a = null;
}
return temp
ух! получаеца, новенький объект, всё-таки есть)
источник

MG

Mikhail Guryev in KotlinLangRu
Zaner
also разворачивется примерно в
val temp = a
lambda(a)
return temp      
                                                                                                                                                                                                           
в терминах с++:  
A* a = new A(4);                                                                                                                                                                    
A* const temp = a;
//lambda
{
 a = null;
}
return temp
вот за это спасибо. как ты это сделал?
источник

QH

Quantum Harmonizer in KotlinLangRu
Mikhail Guryev
ух! получаеца, новенький объект, всё-таки есть)
какой ещё новенький объёкт?
источник

Z

Zaner in KotlinLangRu
Mikhail Guryev
ух! получаеца, новенький объект, всё-таки есть)
нет там нету нового объекта, A* a = new A(4);                                                                                                                                                                     просто объявление переменной как var a:A = A(4)
источник

MG

Mikhail Guryev in KotlinLangRu
три икс в кубе плюс константа..
источник

MG

Mikhail Guryev in KotlinLangRu
старый указатель зануляется, но новый живёт, получаеца
источник

MG

Mikhail Guryev in KotlinLangRu
ладно, всё равно спасибо, было очень интересно
источник

MG

Mikhail Guryev in KotlinLangRu
Mikhail Guryev
вот за это спасибо. как ты это сделал?
@Zaner256 можешь, плиз, рассказать?
источник

Z

Zaner in KotlinLangRu
Mikhail Guryev
@Zaner256 можешь, плиз, рассказать?
что именно?
источник

MG

Mikhail Guryev in KotlinLangRu
как ты узнал, во что разворачивается экстеншн
источник

MG

Mikhail Guryev in KotlinLangRu
?
источник

Z

Zaner in KotlinLangRu
Mikhail Guryev
как ты узнал, во что разворачивается экстеншн
в оф документации написано что Int.extension() == extension(x:Int)
источник

Z

Zaner in KotlinLangRu
больше никакой магии
источник

MG

Mikhail Guryev in KotlinLangRu
Zaner
в оф документации написано что Int.extension() == extension(x:Int)
хорошо!
на самом деле, обнуления внешних переменных в also, apply, let и тд. выглядят как игра на грани фола
источник