当前位置: 首页 > 知识库问答 >
问题:

静态编程语言:“返回@”是什么意思?

翁建弼
2023-03-14

我在我的一个项目中使用RxJava,我使用Android Studio插件将我的一个类转换为静态编程语言,并在map平Maplambda(java中的Func1)之一中,中间体返回如下所示@Func1

我不知道这意味着什么。

something.flatMap(Func1<ArticleCriteria, Observable<Pair<String, String>>> {
    val isTemporaryClone = it.isATemporaryClone
    val isTheOriginalToken = it.tokenIsOriginalHere

    if (isTemporaryClone) {
        if (!isTheOriginalToken) {
            return@Func1 paramsError("Token is always original for temp articles")
        }

        return@Func1 mJobRunner.doNotRun(DeleteArticleJob.TAG)
                            .doOnNext(deletePersonalActionById(articleId))
    }

    runArticleJobAsync(DeleteArticleJob.TAG, it)
})

共有2个答案

韶景曜
2023-03-14

< code>return@name确定应该应用哪个闭包< code>return语句。

在静态编程语言中,您可以从嵌套闭包调用返回来完成外部闭包。Java这是不可能的。

通常,您可以省略@name

在您的示例中,您不能省略它,因为< code>Func1在另一个函数中使用。

岳风畔
2023-03-14

在Kotlin中,< code>return@label语法用于指定该语句从几个嵌套函数中的哪一个返回。

它与函数文字(lambdas)和局部函数一起工作。未标记的< code>return语句从最近的(即最里面的)封闭< code>fun返回(忽略lambdas)。考虑这个函数:

fun foo(ints: List<Int>) {
    ints.forEach {
        if (it == 0) return
        print(it)
    }
}

在这里,return 将完成 foo 的执行,而不仅仅是 lambda。

但是,如果您想从任何其他函数(lambda或外部乐趣)返回,您必须在返回语句中将其指定为标签:

fun foo(ints: List<Int>) {
    ints.forEach {
        if (it == 0) return@forEach // implicit label for lambda passed to forEach
        print(it)
    }
}
fun foo(ints: List<Int>): List<String> {
    val result = ints.map f@{
        if (it == 0) return@f "zero" // return at named label
        if (it == -1) return emptyList() // return at foo
        "number $it" // expression returned from lambda
    }
    return result
}

foo(listOf(1, -1, 1)) // []
foo(listOf(1, 0, 1)) // ["number 1", "zero", "number 1"]

来自lambda的非本地返回(即从外部函数返回)仅支持本地和内联函数,因为如果lambda没有内联(或者函数放置在对象内部),则不能保证仅在封闭函数内部调用(例如,它可以存储在变量中并稍后调用),在这种情况下,非本地返回将毫无意义。

对于限定的<code>this<code>也有类似的语法,用于引用外部作用域的接收器:<code>this@outer。

 类似资料:
  • 它与扩展函数有什么关系?为什么带有的是函数,而不是关键字? 这个主题似乎没有明确的留档,只有关于扩展的知识假设。

  • 我试图发送一个用户到一个活动的基础上,如果他们的电子邮件被验证,然后如果他们有一个用户名。到目前为止,我的代码如下所示: 和 我如何通过活动?我试着将它作为字符串传递,但没有成功。我做错了什么?

  • 这里已经阐明了和之间的区别。 但我的问题是,为什么我们要使用关键字?从生成的Java代码角度来看没有区别。 静态编程语言代码: 生成:

  • 正式学习 Python 之前,我们有必要先搞清楚【 编程语言】这个概念。 在我们很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们在不知不觉中学会了说话,也能听懂其他小朋友说话的意思,于是我们开始用语言与他人交流。 世界上存在许多种语言,包括汉语、英语、日语、俄语等等,每种语言都有固定的格式,比如汉语(中国话),每个汉字代表着不同的意思,我们必须正确

  • 我试图用OkHttp和Cucumber在静态编程语言中设置一个Spring启动项目,并且在运行Cucumber任务时遇到以下错误。如何修复? 还有build gradle kts片段 我看到了这个错误https://github.com/square/okio/issues/647看起来可能是它,并修复了这个build.gradle,我如何将其翻译为kotlinbuild.gradle.kts?

  • 本文向大家介绍什么是Perl编程语言?,包括了什么是Perl编程语言?的使用技巧和注意事项,需要的朋友参考一下 Perl是一种通用编程语言,最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。 Perl是一种稳定的跨平台编程语言。 尽管Perl并不是正式的缩写,但很少有人将其用作实用提取和报告语言。 它用于公共和私营部门的关键任务项目。 Perl是一种开放