如何访问模板字符串中的地图?

How to access map in template string?

我想使用来自 gradle.properties 的值,这些值应该进入模板字符串。

先天真:

println("${project.properties[somekey]}")

无效:Unresolved reference: somekey

那么,需要报价吗?

println("${project.properties[\"somekey\"]}")

是完全错误的语法:Expecting an expression 第一个 .

我找不到任何示例如何执行此操作,但官方 documentationexpressions.

问题:是否可以访问字符串模板中的映射,如果可以,如何访问?

是且如下:

"${project.properties["someKey"]}"

假设地图具有以下签名:Map<String, Any?>(或Map<Any...

备选方案:

"${project.properties.getValue("someKey")}"
"${project.properties.getOrElse("someKey") { "lazy-evaluation-default-value" }}"
"${project.properties.getOrDefault("someKey", "someFixedDefaultValue")}"

基本上,您放入 ${} 中的所有代码都只是普通的 Kotlin 代码...不需要进一步 quoting/escaping,除了美元符号 $ 本身,例如如果您不希望它被名为 test 的变量替换,则使用 "$test";如果您使用原始字符串

,则使用 """${"$"}test"""

请注意,在这种 println 情况下,以下内容也足够了(这也适用于上面显示的所有替代方案。您可以完全省略外部引号和 ${}):

println(project.properties["someKey"])

另见 Basic types - String templates