Почему основная рутина в Котлине принята как одно выражение? - PullRequest
0 голосов
/ 25 марта 2019

Точка входа в c-подобные языки практически идентична, поэтому котлинский fun main() {}

Это вполне понятно для меня, однако; при использовании этой подпрограммы в качестве функции с одним выражением и (назначении?) любого метода вывода она будет скомпилирована и выведет значение параметра метода печати, а не его возвращаемый тип (который равен Unit). Я думаю, этот фрагмент прояснит ..

fun main() = print("Do I return something?")

Это будет скомпилировано как основная программа Hello World!

  • Почему это приемлемо скомпилировано? метод main возвращает что-то еще, кроме 0?
  • Является ли оператор равенства оператором присваивания? и если это так; что возвращает метод print()? это что-то отличное от Unit?
  • Если так, почему он возвращает Unit, когда присваивает его переменной?
fun main() {
    val x= println()
    print(x)
}

Кроме того, почему он не возвращает Unit в этом случае:

fun main() = foo()
fun foo(): Unit {}

Ответы [ 2 ]

4 голосов
/ 25 марта 2019

Я не понимаю все, что вы просите.= здесь не оператор присваивания.Это просто более короткий способ написания метода:

 fun main() = print("Do I return something?")

эквивалентен

fun main(): Unit {
    return print("Do I return something?")
}

А поскольку тип возвращаемого значения print() равен Unit, он эквивалентен

fun main() {
    print("Do I return something?")
}

Подробнее см. в документации .

Однако в следующем фрагменте = - это оператор присваивания:

fun main() {
    val x = println()
    print(x)
}

Таким образом, этот код вызывает println() и присваивает то, что он возвращает (Unit), переменной x.Печать x, таким образом, производит вывод kotlin.Unit.

1 голос
/ 25 марта 2019

Надеюсь, это поможет:

  • Точкой входа в программу Kotlin является fun main(): Unit или fun main(args: Array<String>): Unit, которые являются функциями, которые возвращают Unit
  • Unit - это то, что возвращается по умолчанию из функций Kotlin, когда нет ничего интересного для возврата
  • println() возвращает Unit
  • A Unit тип возврата часто пропускается в коде, но подразумевается
  • fun foo(): T = boo() - это короткий синтаксис для fun foo(): T { return boo() }
  • Так как fun main(): Unit и fun println(...): Unit имеют одинаковый тип возврата Unit, допустимо написать fun main() = println()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...