繁体   English   中英

在 Kotlin 中,如何创建一个 lambda 列表,其中每个 lambda 的类型为 (Int) -> List? 我收到解构声明错误

[英]In Kotlin, how do I create a list of lambdas where each lambda is of the type (Int) -> List? I'm getting destructuring declaration errors

我正在尝试在 Kotlin 中创建 lambda 列表,但出现以下编译时错误:

 Destructuring declaration initializer of type Int must have a 'component1()' function

这是我的代码:

val pathXRanges = listOf<(Int) -> List<Int>>(
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()}, // diagonal 1 (y = -x)
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()}, // diagonal 2 (y = x)
                {(extX) -> List(board.k * 2 - 2) { extX } }, // x = x
                {(extX) -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList()} // y = y
        )

差不多就是这样,任何帮助表示赞赏。 如果您需要澄清任何事情,请告诉我。

谢谢!

只需从extX lambda 参数值中删除括号,即:

    val pathXRanges = listOf<(Int) -> List<Int>>(
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() }, // diagonal 1 (y = -x)
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() }, // diagonal 2 (y = x)
      { extX -> List(board.k * 2 - 2) { extX } }, // x = x
      { extX -> ((extX - (board.k - 1))..(extX + board.k - 1)).toList() } // y = y
    )

括号向编译器指示 lambda 参数应该被解构,并且应该调用参数的component1()运算符 function 来为extX

当然, Int没有component1() function,因此报错:

Destructuring declaration initializer of type Int must have a 'component1()' function`.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM