如何在函数中引用带有参数的参数?

how to reference arguments with parameters in a function?

提问人:coilic3 提问时间:9/7/2023 更新时间:9/8/2023 访问量:39

问:

class Score(
    val score:Int
){
    fun PersonalScore(){
        println(score)
    }

}
fun comPare(a: Int, b: Int, c: Int): Int{
    var max = a
    if(max < b) max = b
    if(max < c) max = c
    println("The best score is $max")
    return max
}
fun main() {
    val score1 = Score(10)
    val score2 = Score(4)
    val score3 = Score(7)
    comPare(score1, score2, score3)  //this line is error

P/s:我是初学者,我不知道如何解决它。请给我一些指导,我将非常感谢您的帮助。非常感谢你们!!

可以更深入地理解,越来越多的实践

函数 Kotlin 方法 参考

评论

0赞 gidds 9/8/2023
你能发布确切的错误消息吗?(大多数错误消息都非常有用,会告诉您问题所在。如果其他人遇到同样的问题,包括错误消息可能会帮助其他人找到这个问题。

答:

-1赞 Ehsan Ullah 9/7/2023 #1

您应该在 Score 类中创建 getter 和 setter。

class Score(){
val classLevelScore:Int = 0
    fun PersonalScore(){
        println(classLevelScore)
    }

   fun setScore(score:Int){
      classLevelScore = score
     }

   fun getScore():Int{
        return classLevelScore
     }

}
fun comPare(a: Int, b: Int, c: Int): Int{
    var max = a
    if(max < b) max = b
    if(max < c) max = c
    println("The best score is $max")
    return max
}
fun main() {
    val score1 = Score()
    score1.setScore(10)
    val score2 = Score(4)
    score2.setScore(4)
    val score3 = Score(7)
    score3.setScore(7)
    comPare(score1.getScore(), score2.getScore(), score3.getScore())
}

所以这里我们有班级水平的分数。我们通过一种方法设置分数,并通过一种方法获得该分数

评论

2赞 Tenfour04 9/7/2023
这是 Kotlin 中的主要反模式,因为 Kotlin 使用的是属性,而不是 getter/setter 函数。该分数已可从您的财产访问。classLevelScore
0赞 Manuel Mato 9/7/2023 #2

请尝试以下方法:

data class Score(val value: Int) {
    fun personalScore() {
        println(value)
    }
}

fun compareScores(score1: Score, score2: Score, score3: Score): Score {
    var maxScore = score1

    if (score2.value > maxScore.value) {
        maxScore = score2
    }

    if (score3.value > maxScore.value) {
        maxScore = score3
    }

    println("The best score is ${maxScore.value}")
    return maxScore
}

val score1 = Score(10)
val score2 = Score(4)
val score3 = Score(7)

val bestScore = compareScores(score1, score2, score3)
bestScore.personalScore()

结果是The best score is 10

2赞 Tenfour04 9/7/2023 #3

您定义了要获取参数的函数。您的 Score 类不是 .这是一个 .它内部有一个属性,即 .你必须非常精确。如果参数定义为 ,则必须向它传递一个 ,而不是 。comPareIntIntScoreIntIntIntScore

因此,有两种不同的(相互排斥的)解决方案。

  1. 将参数传递给函数时,将参数从 Score 实例中提取出来。IntcomPare
  2. 将函数更改为采用参数而不是参数,并从此函数内的 Score 实例中读取值。comPareScoreInt

1:

fun main() {
    val score1 = Score(10)
    val score2 = Score(4)
    val score3 = Score(7)
    comPare(score1.score, score2.score, score3.score)
} 

2:

fun comPare(a: Score, b: Score, c: Score): Int{
    var max = a.score
    if(max < b.score) max = b.score
    if(max < c.score) max = c.score
    println("The best score is $max")
    return max.score
}

评论

1赞 Tenfour04 9/7/2023
旁注:按照惯例,函数名称应以小写字母开头。这有助于将它们与构造函数区分开来。因此,您的函数应该被命名。但实际上,一个函数应该总是以动词开头命名,这样它就可以描述它的作用,所以它实际上应该被命名为 。而“比较”是一个词,所以你的函数应该命名为 .PersonalScorepersonalScoreprintScorecomParecompare
0赞 coilic3 9/11/2023
谢谢先生,这对我真的很有帮助。