首页 > 解决方案 > 没有返回或分配的值会发生什么?

问题描述

我遇到了一个功能:

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的这个特性吗?

标签: scalareturn-valueside-effects

解决方案


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

语句位置中的纯表达式不会做任何事情并被丢弃:

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() 加载 JDBC 驱动程序的现有程序将继续工作而无需修改。

请注意,尽管Class.forName没有被分配给任何东西,但这并不意味着它什么都不做,它被认为是openopen.


推荐阅读