如何注释 lambda 的 return 值

How to annotate lambda's return value

我有一个带有 lambda 参数的函数:

private fun MyFun(
    progress: () -> Float,
) {
    // ...
}

我想用 @FloatRange(from = 0.0, to = 1.0) 注释 progress lambda 的 return 值,但不知道该怎么做。我解决这个问题的所有尝试都会导致语法错误。我哪里错了?

在 kotlin 语言中,lambda 用于执行任务,而不是用于注释。您可以像这样注释代码 // FloatRange(from = 0.0, to = 1.0)

示例:

// FloatRange(from = 0.0, to = 1.0)

私享MyFun(

进度:() -> 浮动,

) {

}

您可以阅读 here 以更好地理解 kotlin 语言中的 lambda

你可以定义一个功能接口来描述你的类型,并在那里注释它:

fun interface ProgressCallback {
    @FloatRange(from = 0.0, to = 1.0) fun progress(): Float
}

private fun myFun(progress: ProgressCallback) {
    // ...
}

fun foo() {
    myFun { 5.0f } // error, doesn't conform to FloatRange
}

仅供参考,如果您传递的是函数引用而不是 lambda,或者如果您间接调用 return 是 Fl​​oat 的函数,lint 不够复杂,无法检测到满足要求的失败:

fun bar() = 5.0f

fun foo() {
    myFun(::bar) // no error
    myFun { bar() } // no error
}

或者如果您 return 除了单个文字值之外的任何内容:

fun foo() {
    myFun { 1.0f * 2.0f } // no error
}