Function 调用函数时的Scala增量计数器
如何在scala中每次调用函数时递增该函数?我有一个函数a,它执行一组操作,当用户调用函数a时,我希望有一个计数器,它递增并返回计数器值。下面的代码在我调用它时没有返回预期的计数器1Function 调用函数时的Scala增量计数器,function,scala,counter,Function,Scala,Counter,如何在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,
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
}
在Scala中,
val
是一个不可变的对象,不能更改,var
是一个可以更改的可变对象。因此,您可以通过使用var
并执行count=count+1
来实现这一点。虽然代码的其余部分是高度可疑的,我希望这只是一个玩具,你正在玩…但这是一个直接的答案 按照编写此代码的方式,它无法正常工作-您的计数器位于函数中,每次函数调用时都会创建和释放get,因此它总是返回常量值
您需要在功能块外定义计数器
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()
}
}
和其他许多人。谢谢@Justin Pihony,是的,这是一个临时代码,我是一个新手。谢谢@mavarazy你的想法刚刚奏效,尽管我没有使用Akka演员,因为我不熟悉它