<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)

Posted

技术标签:

【中文标题】<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)【英文标题】:<!WHATVER!> syntax in Kotlin? (Angle brackets wrapping exclamation points) 【发布时间】: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);

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

很棒的详细回复。感谢您的两个链接!我总是对一切如何运作感兴趣。 :)

以上是关于<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)的主要内容,如果未能解决你的问题,请参考以下文章

Angular 2 (ng2) 在 [class.whatever] 中使用异步管道

jquery 从特定表单获取所有输入

将通用List / Ienumerable转换为DataTable?

Kotlin:如何使用列表强制转换:未经检查的强制转换:kotlin.collections.List<Kotlin.Any?> 到 kotlin.colletions.List<W

kotlin属性代理

可以将派生类对象视为与基类相同类型吗? <noobieQ/>