首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin构造:函数调用具有附加的主体--这样的构造意味着什么或者如何调用它(如果我想在文档中查找它)?

Kotlin构造:函数调用具有附加的主体--这样的构造意味着什么或者如何调用它(如果我想在文档中查找它)?
EN

Stack Overflow用户
提问于 2022-08-02 06:46:17
回答 1查看 33关注 0票数 1

我看到了Kotlin密码:

代码语言:javascript
复制
    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返回一些对象,两个命名参数(launchSingleToprestoreState)是布尔类型。

我是正确地解读了这个结构--只是传递论点的另一种方式,,还是有更深层次的东西?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-02 08:17:43

我能破解这个建筑吗?

差不多了。你的开头是对的,但结尾不完全正确。

让我们从你的正确开始,为后人提供一些词汇。实际上,您所使用的过载导航包含两个参数:一个字符串route和一个builder函数。

kotlin中的函数可以通过多种方式传递,但最常见的(以及这里使用的)是传递一个lambda表达。因为lambda表达式的语法是基于大括号({ ... })的,所以它看起来像代码块,因此Kotlin语言更进一步,允许在函数调用当lambda是最后一个参数时的括号之外传递lambda表达式。这样做的原因恰恰是为了允许类似于自己的配置语言的这种构造。这通常被称为DSL(领域特定语言)。

关于你做错了什么:

所以,我可以猜到NavOptionsBuilder有三个参数

不怎么有意思。NavOptionsBuilder是作为navigate的第二个参数传递的函数的接收方。这意味着,在您传递的lambda中,NavOptionsBuilder实例隐式地作为this可用。

反过来,这意味着您可以访问该lambda块中的NavOptionsBuilder方法和属性。这就是popUpTolaunchSingleToprestoreState的含义:NavOptionsBuilder的方法和属性--而不是“参数”。

您可以找到更多关于这个这里的一般信息。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73203079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档