调用函数的 Scala 增量计数器
Scala Increment Counter on calling Function
如何在 Scala 中每次调用函数时递增一个函数?我有一个执行一组操作的函数 A,当用户调用函数 A 时,我希望有一个递增的计数器和 returns 计数器值。当我调用它时,下面的代码没有 return 预期的计数器 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
}
在 Scala 中,val
是不可变对象,不能更改,而 var
是可变对象,可以更改。因此,您可以使用 var
并执行 count = count + 1
来完成这项工作。尽管代码的其余部分非常可疑,而且我希望这只是您正在玩的玩具……但这是一个直接的答案。
这段代码的编写方式无法正常工作 - 您的计数器在函数内部,并且在每次函数调用时都会创建和处理,因此它始终 return 常量值。
您需要在函数块外定义计数器
一种可能的方法,使用 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,用于处理并发访问。
- 另一个选择,更 Scala 的方式,是有一个 Actor,它会为你处理计数,有 2 个命令 increase 和 get。
还有很多其他的。
如何在 Scala 中每次调用函数时递增一个函数?我有一个执行一组操作的函数 A,当用户调用函数 A 时,我希望有一个递增的计数器和 returns 计数器值。当我调用它时,下面的代码没有 return 预期的计数器 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
}
在 Scala 中,val
是不可变对象,不能更改,而 var
是可变对象,可以更改。因此,您可以使用 var
并执行 count = count + 1
来完成这项工作。尽管代码的其余部分非常可疑,而且我希望这只是您正在玩的玩具……但这是一个直接的答案。
这段代码的编写方式无法正常工作 - 您的计数器在函数内部,并且在每次函数调用时都会创建和处理,因此它始终 return 常量值。
您需要在函数块外定义计数器
一种可能的方法,使用 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,用于处理并发访问。
- 另一个选择,更 Scala 的方式,是有一个 Actor,它会为你处理计数,有 2 个命令 increase 和 get。
还有很多其他的。