gpt4 book ai didi

kotlin - 了解包含点和括号的 lambda 构造

转载 作者:行者123 更新时间:2023-12-02 16:11:19 25 4
gpt4 key购买 nike

这是 rememberCoilPainter 的函数声明:

@Composable
fun rememberCoilPainter(
request: Any?,
imageLoader: ImageLoader = CoilPainterDefaults.defaultImageLoader(),
shouldRefetchOnSizeChange: ShouldRefetchOnSizeChange = ShouldRefetchOnSizeChange { _, _ -> false },
requestBuilder: (ImageRequest.Builder.(size: IntSize) -> ImageRequest.Builder)? = null,
fadeIn: Boolean = false,
fadeInDurationMs: Int = LoadPainterDefaults.FadeInTransitionDuration,
@DrawableRes previewPlaceholder: Int = 0,
): LoadPainter<Any> {

}

我难以理解的代码行是:

requestBuilder: (ImageRequest.Builder.(size: IntSize) -> ImageRequest.Builder)? = 空

在 Builder 之后出现一个点,然后是 (size: IntSize)

这是我第一次在 Kotlin 中看到这种结构,我不确定如何解释它。这是一个 lambda 。通常,对象后面的点是指类或包的子组件。但是点后的 ( ) 不清楚。

如何实现 requestBuilder 参数?

最佳答案

这是一个函数,其接收器类型如下所述:https://kotlinlang.org/docs/lambdas.html#function-types

Function types can optionally have an additional receiver type, which is specified before a dot in the notation: the type A.(B) -> C represents functions that can be called on a receiver object of A with a parameter of B and return a value of C. Function literals with receiver are often used along with these types.

一开始可能很难理解,但这就像您提供的函数/lambda 是 ImageRequest.Builder 的一种方法。或者换句话说:您的 lambda 接收到一个类型为 ImageRequest.Builder 的附加参数,它在 lambda 中作为 this 可用。

您可以像提供任何其他 lambda 一样提供 requestBuilder,但请注意,在其中您可以访问提供给您的 ImageRequest.Builder 对象的属性和方法。

关于kotlin - 了解包含点和括号的 lambda 构造,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67947578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com