gpt4 book ai didi

Kotlin:函数声明必须有一个名字

转载 作者:行者123 更新时间:2023-12-02 13:03:26 24 4
gpt4 key购买 nike

代码目的:Class Pair可以打印出Product name和数量,Class Product中存储的Product name

class Pair<T, U>(var product: Product, var quantity: Int) {
for ( (product,quantity) in productAndQuantityList) {
println("Name: ${product.productName}")
println("Quantity: $quantity")
}
}

以上错误:(2, 9) Kotlin:期待成员声明错误:(2, 57) Kotlin: 函数声明必须有一个名字

class ShoppingCart{
private val productAndQuantityList = mutableListOf<Pair<Product,Int> >()
...
}

open class Product(
val productName: String,
var basePrice: Double,
open val salesPrice: Double,
val description: String) {
...}

  1. 我可以知道如何更改我的代码吗?
  2. 课后 Pair 由 Compiler 建议,但我应该填写任何内容吗?
  3. 我应该为哪个主题工作,以避免再次犯同样的错误?

谢谢!

最佳答案

如果你想在实例化对象时运行 for 循环,那么你应该使用初始化器。您不能简单地将语句直接放在类定义中。

class Pair<T, U>(var product: Product, var quantity: Int) {
init {
for ( (product,quantity) in productAndQuantityList) {
println("Name: ${product.productName}")
println("Quantity: $quantity")
}
}
}

然而,这段代码是错误的,因为Pair无权访问 productAndQuantityList , 尽管 ShoppingCart做。正如 Mathias Henze 所建议的那样,您应该在 ShoppingCart 中创建一个函数并将 for 循环移动到其中,如下所示:

fun printProducts() {
for ( (product,quantity) in productAndQuantityList) {
println("Name: ${product.productName}")
println("Quantity: $quantity")
}
}

至于你的Pair类,类型参数TU是不必要的,因为您不会在任何地方使用它们,并且类本身由标准库提供(标题看起来像 data class Pair<out A, out B>(val first: A, val second: B)

如果您决定使用自己的 Pair 类,请务必将其设为 data class , 所以它可以是 destructured , 并更改 productAndQuantityList 的类型至mutableListOf<Pair> (没有类型参数 Pair<Product, Int> )。

更新

请阅读 Mathias Henze 的回答,这是正确的。我的回答,本来是完全错误的,现在改正了。

关于Kotlin:函数声明必须有一个名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61943028/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com