AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / coding / 问题 / 76986659
Accepted
Nejk
Nejk
Asked: 2023-08-27 18:28:37 +0800 CST2023-08-27 18:28:37 +0800 CST 2023-08-27 18:28:37 +0800 CST

使用 ?.get 访问参数时 Kotlin 引发错误 Unresolved reference

  • 772

我是 Kotlin 新手,我决定编写一个简单的文本游戏。当我尝试访问敌人的生成率(女巫无关)时,我总是收到错误:

Kotlin: Unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
public operator fun MatchGroupCollection.get(name: String): MatchGroup? defined in kotlin.text

.get我的 IDE 中变成红色。

这是我的敌人龙:

"dragon" to mapOf(
        "spawnRate" to mapOf("hill" to 1.01),
        "drops" to mapOf(
            "dragon scale" to mapOf("quantity" to listOf(1,10)),
            "dragon egg" to 0.01,
            "dragon head" to 1.01,
            ),
        "exp" to listOf(1, 4),
        "dmg" to listOf(35,75),
    ),

我试图像这样访问spawnRate:

val dragonSpawnRate = mobs["dragon"]?.get("spawnRate")?.get("hill")
println("Dragon Spawn Rate: $dragonSpawnRate")

我尝试了更多的想法,但最终都出现了同样的错误。

    val dragon = mobs["dragon"]?.get("spawnRate")
    val dragonSpawnRate = dragon?.get("hill")
    //-----------------------------------------------
    val dragon = mobs["dragon"]?.get("spawnRate")
    val dragonSpawnRate = dragon["hill"]

我还尝试了这个问题的一些解决方案: https://stackoverflow.com/questions/61660123/define-class-parameter-with-get-at-kotlin

但他们都没有帮助。我也尝试询问chat gpt,但也没有帮助。

kotlin
  • 1 1 个回答
  • 24 Views

1 个回答

  • Voted
  1. Best Answer
    broot
    2023-08-27T20:52:35+08:002023-08-27T20:52:35+08:00

    顾名思义,集合用于存储相似项目的集合。映射适用于从用户 ID 映射到用户数据等情况。在这种情况下,每个项目几乎都是相同的情况。

    在您的示例中,每个项目都是一个完全不同的故事:其中一些是数字,其中一些是列表或其他地图。地图并不是真正为这种情况设计的。它们可以存储此类数据,但我们将丢失类型信息,因此我们必须在需要时转换值:

    val map = mapOf("foo" to 1, "bar" to "baz")
    println(map.getValue("bar").length) // does not compile
    println((map.getValue("bar") as String).length) // compiles
    

    如果我们有多个具有非常特定含义的已知字段,我们不应该将它们存储在映射中,而应该存储在类中。在 Kotlin 中,我们可以使用数据类来实现此目的:

    fun main() {
        val mobs = mapOf(
            "dragon" to Mob(
                spawnRate = mapOf("hill" to 1.01),
                drops = mapOf(
                    "dragon scale" to Drop(quantity = 1..10)
                ),
                exp = 1..4,
                dmg = 35..75,
            )
        )
    
        // prints: 1.01
        println(mobs.getValue("dragon").spawnRate.getValue("hill"))
    }
    
    data class Mob(
        val spawnRate: Map<String, Double>,
        val drops: Map<String, Drop>,
        val exp: IntRange,
        val dmg: IntRange,
    )
    
    data class Drop(
        val quantity: IntRange
    )
    

    免责声明:我不确定IntRange这是否是一个好主意。

    这并不是 Kotlin 特有的。这条规则几乎适用于所有强类型语言。

    • 0

相关问题

  • Kotlin - 如何正确并行处理数据?

  • 如何在 Compose 中结合注释和样式?

  • Kotlin 收集 SharedFlow 未收集

  • 如何在 Spring Data Elasticsearch 中使用多术语过滤器?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    使用 <font color="#xxx"> 突出显示 html 中的代码

    • 2 个回答
  • Marko Smith

    为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类?

    • 1 个回答
  • Marko Smith

    您可以使用花括号初始化列表作为(默认)模板参数吗?

    • 2 个回答
  • Marko Smith

    为什么列表推导式在内部创建一个函数?

    • 1 个回答
  • Marko Smith

    我正在尝试仅使用海龟随机和数学模块来制作吃豆人游戏

    • 1 个回答
  • Marko Smith

    java.lang.NoSuchMethodError: 'void org.openqa.selenium.remote.http.ClientConfig.<init>(java.net.URI, java.time.Duration, java.time.Duratio

    • 3 个回答
  • Marko Smith

    为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)?

    • 4 个回答
  • Marko Smith

    为什么库中不调用全局变量的构造函数?

    • 1 个回答
  • Marko Smith

    std::common_reference_with 在元组上的行为不一致。哪个是对的?

    • 1 个回答
  • Marko Smith

    C++17 中 std::byte 只能按位运算?

    • 1 个回答
  • Martin Hope
    fbrereto 为什么在传递 {} 时重载解析更喜欢 std::nullptr_t 而不是类? 2023-12-21 00:31:04 +0800 CST
  • Martin Hope
    比尔盖子 您可以使用花括号初始化列表作为(默认)模板参数吗? 2023-12-17 10:02:06 +0800 CST
  • Martin Hope
    Amir reza Riahi 为什么列表推导式在内部创建一个函数? 2023-11-16 20:53:19 +0800 CST
  • Martin Hope
    Michael A fmt 格式 %H:%M:%S 不带小数 2023-11-11 01:13:05 +0800 CST
  • Martin Hope
    God I Hate Python C++20 的 std::views::filter 未正确过滤视图 2023-08-27 18:40:35 +0800 CST
  • Martin Hope
    LiDa Cute 为什么 'char -> int' 是提升,而 'char -> Short' 是转换(但不是提升)? 2023-08-24 20:46:59 +0800 CST
  • Martin Hope
    jabaa 为什么库中不调用全局变量的构造函数? 2023-08-18 07:15:20 +0800 CST
  • Martin Hope
    Panagiotis Syskakis std::common_reference_with 在元组上的行为不一致。哪个是对的? 2023-08-17 21:24:06 +0800 CST
  • Martin Hope
    Alex Guteniev 为什么编译器在这里错过矢量化? 2023-08-17 18:58:07 +0800 CST
  • Martin Hope
    wimalopaan C++17 中 std::byte 只能按位运算? 2023-08-17 17:13:58 +0800 CST

热门标签

python javascript c++ c# java typescript sql reactjs html

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve