如何注释 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 是 Float 的函数,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
}
我有一个带有 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 是 Float 的函数,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
}