如何在枚举 class 中获得使用 "when" 的方法?

How can I get a method working with "when" inside a enum class?

我需要这种与 WHEN 调用配合使用的“有趣价格”方法。但是,我就是做不到。我需要能够打印出下面的注释代码。我错过了什么?

enum class Tariff {
   STANDARD, EVENT, WEEKEND;

   fun price() {
       when {
           STANDARD -> "1.99"
           EVENT -> "1.49"
           WEEKEND -> "2.99"

       }
   }
}

//val  default = Tariff.STANDARD
//println(default.price()) // gives 1.99
//val weekend  = Tariff.WEEKEND
//println(weekend.price()) // gives 2.99

要引用在枚举中调用 price() 的事物(枚举的实例),您可以使用单词 this,因此您应该这样做:

fun price() : String {
    return when (this) {
        STANDARD -> "1.99"
        EVENT -> "1.49"
        WEEKEND -> "2.99"
    }
}

注意 return 类型和 return 关键字。

或者:

fun price() =
    when (this) {
        STANDARD -> "1.99"
        EVENT -> "1.49"
        WEEKEND -> "2.99"
    }

与其使用 when 枚举函数中的枚举值,不如考虑将 price 存储为 class 的 属性:

enum class Tariff(val price: String) {
    STANDARD("1.99"), EVENT("1.49"), WEEKEND("2.99");
}

那么你可以这样称呼它:

fun main() {
    println(Tariff.STANDARD.price)
    println(Tariff.EVENT.price)
    println(Tariff.WEEKEND.price)
}

结果:

1.99
1.49
2.99