我如何 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
}