没有返回或分配的值会怎样?

Alo*_*lon 4 scala side-effects return-value

我遇到了一个功能:

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

函数中的第一个和最后一个语句不执行任何操作。我知道Class.forName返回什么,但是返回的值不在任何地方使用,也没有赋值。同样的事情true。只是true在代码的中间。

您能告诉我Scala的这一功能吗?

Mar*_*lic 5

如果没有返回值,则将最后一个表达式作为返回值

处于语句位置的纯表达式不会执行任何操作并被丢弃:

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

Run Code Online (Sandbox Code Playgroud)

关于副作用

Class.forName("com.mysql.jdbc.Driver")
Run Code Online (Sandbox Code Playgroud)

似乎是加载现在不推荐使用的JDBC驱动程序的一种方式:

应用程序不再需要使用Class.forName()显式加载JDBC驱动程序。当前使用Class.forName()加载JDBC驱动程序的现有程序将继续运行,而无需进行任何修改。

请注意,尽管Class.forName未分配任何内容,但这并不意味着它什么也不做,这被认为是open在范围之外改变程序状态的副作用open