dictionary - 如何访问模板字符串中的 map ?

标签 dictionary kotlin string-interpolation

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

天真的第一:

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

不起作用:未解析的引用:somekey

那么,需要引号吗?

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

语法完全错误:第一个 需要一个表达式

我找不到任何示例如何做到这一点,但官方 documentation表达式

问题:是否可以在字符串模板中访问 map ,如果可以,如何访问?

最佳答案

是的,如下:

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

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

替代方案:

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

基本上你在 ${} 中放入的所有代码只是普通的 Kotlin 代码...不需要进一步引用/转义,除了美元符号 $本身,例如使用"\$test"如果您不希望将其替换为名为 test 的变量或"""${"$"}test"""如果您使用原始字符串

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

println(project.properties["someKey"])

另请参阅Basic types - String templates

关于dictionary - 如何访问模板字符串中的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66168436/

相关文章:

java - Java实现异构函数映射的方式有哪些?它们的优缺点?

c++ - 插入到 Trie 中,NULL 指针

android - 使用 Fuel 和 Result 将字节数组转换为 Json

android - 请求定位权限,grantResults为空

dictionary - Clojure:使用多个键访问映射

Python,提高循环性能

kotlin - 如何在Gradle中强制降级插件版本?

Swift 3 不正确的字符串插值与隐式展开的 Optionals

swift - Xcode 12 和 OSLog (os.log) : wrapping OSLogMessage causes compile error: Argument must be a string interpolation

c# - 在 FormattableString 和 (str, params object[]) 之间转换