Как компилятор Kotlin находит объекты в файле - PullRequest
0 голосов
/ 13 марта 2019

Не может ли JVM обнаружить переменные (в той же области видимости) ниже переменной?

Т.е. они могут обнаруживать только переменные, объявленные до этой переменной.

Я просто пытаюсь получитьпонимание того, как компилятор находит объекты в файле (и его ограничения):

код Котлина

fun main(args : Array<String>) {
    var first: Int = second + 2 // Unresolved Reference: Second 
    var second: Int = 1
    var third: Int = 1 + returnTwo() // works fine
}
fun returnTwo(): Int = 2

Таким образом, компилятор перемещается сверху вниз - однакоон может получить функциональный объект из любого места?

Ответы [ 2 ]

0 голосов
/ 13 марта 2019

Область применения переменных и методов определяется разделом 6.3 Спецификации языка Java .Компилятор Java должен соответствовать этим правилам, независимо от того, как он реализован.Не имеет значения, сканирует ли он файл сверху вниз, снизу вверх или вбок, если он соответствует спецификации в отношении правил области видимости.

В примере кода, который вы дали в своем вопросе,Правила области видимости Котлина очень похожи на правила Java;т.е. локальные переменные видны после объявления , а функции в глобальной области видны везде.

0 голосов
/ 13 марта 2019

Язык, подобный Java, идет сверху вниз, т.е. построчно в области видимости метода.
Компилятор Java фактически выполняет построчное преобразование исходного кода, который вы написали в определенном методе, в промежуточную форму, называемую байт-кодом , которую JVM использует для интерпретации и запуска на машинах.

Обратите внимание, что JAVA также создает график для разрешения прямой зависимости, например, чтобы проверить, является ли вывод вызова функции в назначении переменной правильным или нет или требует ли он приведения и т. Д.

Принимая во внимание, что языки, такие как Javascript, имеют концепцию, называемую «поднятие переменных», когда все объявленные переменные автоматически поднимаются наверх для использования остальными функциями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...