我看到了Kotlin密码:
navController.navigate("sales_order/" + it.toString()) {
popUpTo(navController.graph.findStartDestination().id) {
saveState = true
}
launchSingleTop = true
restoreState = true
}我可以把它描述为“函数调用”(function,navController.navigate)“具有附加的主体”({...})。这样的构造是如何被调用的(如果我想在文档中查找它),这意味着什么?
当我检查navController.navigate的类型时(.)args,则有2个参数。第一个参数-- string --是在()中提供的,我试图猜测,{...}中的所有内容都是第二个参数的内容,在本例中,第二个参数具有NavOptionsBuilder类型。因此,我可以猜到NavOptionsBuilder有3个参数:一个函数调用popUpTo返回一些对象,两个命名参数(launchSingleTop,restoreState)是布尔类型。
我是正确地解读了这个结构--只是传递论点的另一种方式,,还是有更深层次的东西?
发布于 2022-08-02 08:17:43
我能破解这个建筑吗?
差不多了。你的开头是对的,但结尾不完全正确。
让我们从你的正确开始,为后人提供一些词汇。实际上,您所使用的过载导航包含两个参数:一个字符串route和一个builder函数。
kotlin中的函数可以通过多种方式传递,但最常见的(以及这里使用的)是传递一个lambda表达。因为lambda表达式的语法是基于大括号({ ... })的,所以它看起来像代码块,因此Kotlin语言更进一步,允许在函数调用当lambda是最后一个参数时的括号之外传递lambda表达式。这样做的原因恰恰是为了允许类似于自己的配置语言的这种构造。这通常被称为DSL(领域特定语言)。
关于你做错了什么:
所以,我可以猜到NavOptionsBuilder有三个参数
不怎么有意思。NavOptionsBuilder是作为navigate的第二个参数传递的函数的接收方。这意味着,在您传递的lambda中,NavOptionsBuilder实例隐式地作为this可用。
反过来,这意味着您可以访问该lambda块中的NavOptionsBuilder方法和属性。这就是popUpTo、launchSingleTop和restoreState的含义:NavOptionsBuilder的方法和属性--而不是“参数”。
您可以找到更多关于这个这里的一般信息。
https://stackoverflow.com/questions/73203079
复制相似问题