如何在每次调用scala时增加一个函数?我有一个函数A执行一组动作,当用户调用函数A时,我希望有一个计数器,它递增并返回计数器值。当我调用它时,下面的代码不会返回1的预期计数器。
def return_id (email_user: String) : Int = {
Thread.sleep(1000)
val count = 0
implicit val conn = ExecuteQuery.getConnection(GENERAL_DB, DB_USER, DB_PASS)
var idQuery=executeQuery(s"SELECT id FROM Profile WHERE email = '$email_user';")
idQuery.first()
val pid=idQuery.getInt("id")
println(pid)
if(pid != 0){
+count = 1
}
return count
}
答案 0 :(得分:1)
编写此代码的方式,它将无法正常工作 - 您的计数器位于函数内部并且在每个函数调用中创建并处理它,因此它将始终返回常量值。
您需要在功能块之外定义计数器
一种可行的方法,使用AtomicInteger
val count = new AtomicInteger()
def return_id (email_user: String) : Int = {
Thread.sleep(1000)
implicit val conn = ExecuteQuery.getConnection(GENERAL_DB, DB_USER, DB_PASS)
var idQuery=executeQuery(s"SELECT id FROM Profile WHERE email = '$email_user';")
idQuery.first()
val pid = idQuery.getInt("id")
println(pid)
if(pid != 0){
count.incrementAndGet()
} else {
count.get()
}
}
count 是一个AtomicInteger,用于处理并发访问。
还有很多其他人。
答案 1 :(得分:0)
在Scala中,val
是一个不可变对象,无法更改,而var
是一个可以更改的变量对象。因此,您可以使用var
并执行count = count + 1
来完成此工作。虽然其余代码非常可疑,但我希望这只是你玩的玩具......但这是一个直接的答案。