【问题标题】:<!WHATVER!> syntax in Kotlin? (Angle brackets wrapping exclamation points)<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)
【发布时间】:2022-01-23 20:35:48
【问题描述】:

我在 Kotlin 编译器测试套件中看到了这种我不熟悉的语法。

// !DIAGNOSTICS: +UNUSED_LAMBDA_EXPRESSION, +UNUSED_VARIABLE

fun unusedLiteral(){
    <!UNUSED_LAMBDA_EXPRESSION!>{ ->
        val <!UNUSED_VARIABLE!>i<!> = 1
    }<!>
}

&lt;!UNUSED_LAMBDA_EXPRESSION!&gt;...&lt;!&gt; 是什么意思?

发现于unusedLiteral.kt

UNUSED_LAMBDA_EXPRESSION 中的术语 Errors.kt 声明为:

DiagnosticFactory0<KtLambdaExpression> UNUSED_LAMBDA_EXPRESSION = DiagnosticFactory0.create(WARNING);

【问题讨论】:

    标签: kotlin syntax


    【解决方案1】:

    此语法不是有效的 Kotlin。它仅在 Kotlin 的测试管道的测试数据文件中使用。也就是说,只有测试运行程序才能识别这种语法,而不是 Kotlin 编译器。具体来说,&lt;!DIAGNOSTIC_NAME!&gt;foo&lt;!&gt; 语法表示 handler。处理程序对事物进行检查,或将信息输出到文件。在这种情况下,此语法会检查文件中该点是否确实发出了指定的诊断信息。

    另请注意,顶部的// !DIAGNOSTICS 评论不仅仅是一条评论。它表示一个指令。指令就像运行测试的选项。

    我强烈建议您阅读compiler/testData/diagnostics/ReadMe.md,它解释了诊断测试的具体工作原理,如果您真的对这些东西感兴趣,也请查看compiler/test-infrastructure/ReadMe.md,它告诉您整个测试管道的工作原理一般。

    【讨论】:

    • 很棒的详细回复。感谢您的两个链接!我总是对一切如何运作感兴趣。 :)
    猜你喜欢
    • 1970-01-01
    • 2018-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    相关资源
    最近更新 更多