Я бы хотел go экстремальный фундамент без всяких причудливых слов. это ключевое слово Когда у вас есть один параметр, вы можете вызывать его, используя ключевое слово it , и это хорошо работает, например, с HOF,
private fun itKeyword(itKeyword:(String) -> Unit) {
itKeyword("")
}
fun callItFun() {
itKeyword {//it:String // this is high light over here like this
}
Но если вы попытаетесь сделать что-то вроде этого:
private fun itKeyword(itKeyword:(String, Int) -> Unit) {
itKeyword("", 1)
}
fun callItFun() {
itKeyword {yourName, age -> //yourName, age is define by user
}
}
видите? здесь нет ключевого слова it , определяемого здесь компилятором, но вместо этого мы должны передать два параметра, когда мы определили HOF, но если мы оставим это поле пустым, компилятор выдаст нам ошибку Эй, передайте что-нибудь, чувак, я о какой переменной вы говорите, здесь переданы две переменные. Это означает, что когда у вас есть только один параметр, вы можете вызвать его, используя ключевое слово it . это ключевое слово Существуют две области видимости или переменные / свойства: глобальная и локальная область видимости, когда вы определили некоторую переменную как глобальную область видимости и хотите вызвать ее в нескольких методах / функциях, и в некотором месте вы должны использовать тот же тип другой переменной с тем же именем. на местном уровне, в этом случае мы будем использовать это ключевое слово, и почему это так?
private lateinit var mContext: Context
fun thisKeyword(mContext: Context) {
this.mContext = mContext
}
но что, если мы не используем это ключевое слово и сохраняем его так:
private lateinit var mContext: Context
fun thisKeyword(mContext: Context) {
mContext = mContext
}
Компилятор скажет: мах, что ты наделал, не позвонил мне в голову JK, Компилятор скажет, Val не может быть переназначен , чего ждать? мы не инициировали его как val, но если мы увидим в глобальном масштабе, мы инициируем его как var, но угадайте, что? компилировать правильно. В Kotlin при передаче чего-либо в параметр функции они действуют как Val по умолчанию , что означает, что без этот компилятор использовал локальные переменные области видимости, а не глобальную область видимости, но когда мы используем , это ключевое слово, которое мы сообщаем компилятору, с ключевым словом это свойство здесь до = является глобальной областью действия this.mContext , а после = является локальным, поэтому мы используем это ключевое слово для воздерживается от переменного конфликта. надеюсь, это поможет, спасибо (*).