未返回或分配的值会发生什么情况



我遇到了一个函数:

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的这个功能吗?

如果没有返回,则最后一个表达式被视为返回值。

语句位置的纯表达式将无助其事,并被丢弃:

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

关于副作用

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

这似乎是加载JDBC驱动程序的一种方式,现已弃用:

应用程序不再需要使用 Class.forName((。当前加载 JDBC 驱动程序的现有程序 使用 Class.forName(( 将继续工作而无需修改。

请注意,尽管Class.forName没有分配给任何东西,但这并不意味着它什么都不做,它被认为是open改变程序状态超出open范围的副作用。