我是Kotlin的新手,很难理解下面的代码
private fun <T> catchAsyncExceptions(f: () -> CompletableFuture<T>) =
try {
f().get()
} catch (e: ExecutionException) {
throw e.cause!!
}
所以这个函数叫做f
,它的输入参数是一个名为f
的函数,它是()-
catchAsyncExceptions(someFunctionThatTakesNoArgumentAndReturnsCompletableFuture)
然而,我看到的用法是
override fun getUserInfo(userId: String) =
catchAsyncExceptions {
membersClient.getUserLocation(
GetUserLocationRequest(userId)
)
.thenApply { response ->
val (success, error) = parseSuccessAndError<GetUserLocationResponseResult.Success>(response.result!!)
error?.let {
UserInfoResponse(
error = error.code
)
)
} ?: run {
UserInfoResponse(
data = UserInfoResponseDto(
location = success?.success?.location.toString(),
)
)
}
}
}
请注意
membersClient.getUserLocation(
GetUserLocationRequest(userId)
)
返回
CompletableFuture
类型
我特别困惑为什么它是一个卷曲的括号而不是括号
catchAsyncExceptions {
...
}
在Kotlin中,当使用lambda函数作为参数时,括号是完全可选的。您可以将实现重写为:
catchAsyncExceptions({
membersClient.getUserLocation(
GetUserLocationRequest(userId)
)
.thenApply({ response ->
val (success, error) = parseSuccessAndError<GetUserLocationResponseResult.Success>(response.result!!)
error?.let({
UserInfoResponse(
error = error.code
)
)
}) ?: run({
UserInfoResponse(
data = UserInfoResponseDto(
location = success?.success?.location.toString(),
)
)
})
})
})
这是一个完美的工作代码。为简单起见,省略括号以使代码更具可读性。
函数可以作为其它函数的参数进行传递,然后在其它函数内调用执行,一般称之为回调。下面是一个将函数作为参数的简单例子(function_parameter.go): package main import ( "fmt" ) func main() { callback(1, Add) } func Add(a, b int) { fmt.Printf("The sum
问题内容: 我想在Postgres函数中将表名作为参数传递。我尝试了这段代码: 我得到了这个: 这是我更改为此时遇到的错误: 可能有效,因为如果没有where 得到的部分1,则表示已选定某项。为什么第一个工作和第二个工作不能同时进行?以及如何解决呢? 问题答案: 这可以进一步简化和改进: 使用架构限定名称进行调用(请参见下文): 或者: 要点 使用OUT参数简化功能。您可以直接选择动态SQL的结果
我目前有一个,但是为了灵活性,我希望能够分配一个lambda表达式,将作为映射中的值返回。 所以我创建了这个模板类: 并像这样使用它: IntelliSense提供了更多信息: 多个操作符“=”匹配这些操作数:function“valueorfunction::operator=(const std::function&other)[with T=std::wstring]”function“va
问题内容: 是否可以通过以参数作为参数的javascript函数? 例: 问题答案: 使用“关闭”: 这将创建一个匿名的临时函数包装器,该包装器知道该参数并将其传递给实际的回调实现。
问题内容: 如何在不执行“父”函数或不使用函数的情况下将函数作为参数传递?(因为我已经读到它是不安全的。) 我有这个: 它可以工作,但是问题是在调用函数时触发,而不是在函数中使用时触发。 根据我所读的内容,我可以使用来解决它,但这不是最佳实践。如何在JavaScript中将函数作为参数传递? 问题答案: 您只需要删除括号: 然后,这将传递函数而不先执行它。 这是一个例子:
主要内容:用数组作函数参数在C语言中,函数的参数不仅可以是整数、小数、字符等具体的数据,还可以是指向它们的 指针。用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着函数的结束而被销毁。 像数组、字符串、动态分配的内存等都是一系列数据的集合,没有办法通过一个参数全部传入函数内部,只能传递它们的指针,在函数内部通过指针来影响这些数据集合。 有的时候,对于整数、小数