我如何 return lambda 中的变量
How can I return a variable inside of lambda
private fun get_rating2(review:String):Float{
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
var average_rating = 0.0f
reviewref.get().addOnSuccessListener { reviewsnap ->
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
//I need this average_rating Inside of lambda
}
return average_rating
//this average_rating does not return proper value because It is not in lambda
}
如何 return lambda 中的变量?
我需要在 lambda 内部使用 average_rating
..
那不是 lambda 作用域,它是接口函数作用域,所以如果你想用 average_rating
做一些事情,就在接口函数内部做,return 函数值是错误的 get_rating2(review:String)
当你需要等待接口时,对于你的代码它总是 0.0f
所以这样做:
private fun get_rating2(review:String){
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
reviewref.get().addOnSuccessListener { reviewsnap ->
var average_rating = 0.0f
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
doSomthingWith(average_rating)
}
}
如果您在项目中使用协程,您只需要为您的案例使用暂停功能。
suspend fun getAverageRating(): Float = suspendCancellableCoroutine { continuation ->
reviewref.get().addOnSuccessListener { reviewsnap ->
...
continuation.resumeWith(Result.success(ratinglist.average().toFloat()))
}
// don't remember unsubscribe you listener on cancellation
}
private fun get_rating2(review:String):Float{
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
var average_rating = 0.0f
reviewref.get().addOnSuccessListener { reviewsnap ->
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
//I need this average_rating Inside of lambda
}
return average_rating
//this average_rating does not return proper value because It is not in lambda
}
如何 return lambda 中的变量?
我需要在 lambda 内部使用 average_rating
..
那不是 lambda 作用域,它是接口函数作用域,所以如果你想用 average_rating
做一些事情,就在接口函数内部做,return 函数值是错误的 get_rating2(review:String)
当你需要等待接口时,对于你的代码它总是 0.0f
所以这样做:
private fun get_rating2(review:String){
val reviewref = RTDBref.child(review)
val ratinglist = arrayListOf<Int>()
reviewref.get().addOnSuccessListener { reviewsnap ->
var average_rating = 0.0f
reviewsnap.children.forEach { ratingsnap ->
val rating = ratingsnap.child("rating").getValue<Int>()
ratinglist.add(rating!!)
}
average_rating = ratinglist.average().toFloat()
doSomthingWith(average_rating)
}
}
如果您在项目中使用协程,您只需要为您的案例使用暂停功能。
suspend fun getAverageRating(): Float = suspendCancellableCoroutine { continuation ->
reviewref.get().addOnSuccessListener { reviewsnap ->
...
continuation.resumeWith(Result.success(ratinglist.average().toFloat()))
}
// don't remember unsubscribe you listener on cancellation
}