<!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
<!>
<!UNUSED_LAMBDA_EXPRESSION!>
...<!>
是什么意思?
发现于unusedLiteral.kt
UNUSED_LAMBDA_EXPRESSION
中的术语 Errors.kt 声明为:
DiagnosticFactory0<KtLambdaExpression> UNUSED_LAMBDA_EXPRESSION = DiagnosticFactory0.create(WARNING);
【问题讨论】:
【参考方案1】:此语法不是有效的 Kotlin。它仅在 Kotlin 的测试管道的测试数据文件中使用。也就是说,只有测试运行程序才能识别这种语法,而不是 Kotlin 编译器。具体来说,<!DIAGNOSTIC_NAME!>foo<!>
语法表示 handler。处理程序对事物进行检查,或将信息输出到文件。在这种情况下,此语法会检查文件中该点是否确实发出了指定的诊断信息。
另请注意,顶部的// !DIAGNOSTICS
评论不仅仅是一条评论。它表示一个指令。指令就像运行测试的选项。
我强烈建议您阅读compiler/testData/diagnostics/ReadMe.md,它解释了诊断测试的具体工作原理,如果您真的对这些东西感兴趣,也请查看compiler/test-infrastructure/ReadMe.md,它告诉您整个测试管道的工作原理一般。
【讨论】:
很棒的详细回复。感谢您的两个链接!我总是对一切如何运作感兴趣。 :)以上是关于<!WHATEVER!> Kotlin 中的语法? (尖括号包裹感叹号)的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 (ng2) 在 [class.whatever] 中使用异步管道
将通用List / Ienumerable转换为DataTable?
Kotlin:如何使用列表强制转换:未经检查的强制转换:kotlin.collections.List<Kotlin.Any?> 到 kotlin.colletions.List<W