Что происходит со значениями, которые не возвращаются или не присваиваются? - PullRequest
4 голосов
/ 15 июня 2019

Я столкнулся с функцией:

def open(partitionId: Long,version: Long): Boolean = {
    Class.forName("com.mysql.jdbc.Driver")
    connection = DriverManager.getConnection(url, user, pwd)
    statement = connection.createStatement
    true
  }

Первые и последние операторы в функции ничего не делают. Я знаю, что возвращает Class.forName, но возвращаемое значение нигде не используется и присваивания нет. То же самое для true. Просто true в середине кода.

Не могли бы вы объяснить мне эту особенность Scala?

1 Ответ

5 голосов
/ 15 июня 2019

Если нет возврата, то последним выражением считается возвращаемое значение .

Чистые выражения в позиции оператора ничего не сделают и будут отброшены:

def foo = {
  val x = 1
  "hello" // discarded
  x       // returned as result of foo
}

Относительно побочного эффекта

Class.forName("com.mysql.jdbc.Driver")

это , кажется, имеетбыл способ загрузки драйвера JDBC, который теперь устарел :

Приложениям больше не нужно явно загружать драйверы JDBC с помощью Class.forName ().Существующие программы, которые в настоящее время загружают драйверы JDBC с использованием Class.forName (), будут продолжать работать без изменений.

Примечание. Несмотря на то, что Class.forName не назначен ни для чего, это не означает, что он ничего не делает, этосчитается побочным эффектом open изменения состояния программы за пределами open.

...