Kotlin 无法将成员变量正确转换为lambda表达式

Kotlin 无法将成员变量正确转换为lambda表达式,kotlin,kotlin-extension,Kotlin,Kotlin Extension,如上 data class Person(val name: String, val age: Int) : Comparable<Person> { override fun compareTo(other: Person): Int { return compareValuesBy(this, other, Person::name, Person::age) } } 数据类人员(val name:String,val age:Int):可比较{

如上

data class Person(val name: String, val age: Int) : Comparable<Person> {
    override fun compareTo(other: Person): Int {
        return compareValuesBy(this, other, Person::name, Person::age)
    }
}
数据类人员(val name:String,val age:Int):可比较{
覆盖有趣的比较对象(其他:人):Int{
返回compareValuesBy(this、other、Person::name、Person::age)
}
}
上面的代码运行正常,当我转换成下面的代码时,我无法得到正确的结果

data class Person(val name: String, val age: Int) : Comparable<Person> {
    override fun compareTo(other: Person): Int {
        return compareValuesBy(this, other, { name }, { age })
    }
}
数据类人员(val name:String,val age:Int):可比较{
覆盖有趣的比较对象(其他:人):Int{
返回compareValuesBy(this,other,{name},{age})
}
}

您应该在花括号内使用it,然后访问姓名和年龄。如果您不这样做,编译器会接受您的第一个参数(在this之后,other),即name,在本例中为Person对象而非String

此代码适用于您:

data class Person(val name: String, val age: Int) : Comparable<Person> {
  override fun compareTo(other: Person): Int {
    return compareValuesBy(this,other,{it.name},{it.age})
   }
}
数据类人员(val name:String,val age:Int):可比较{
覆盖有趣的比较对象(其他:人):Int{
返回compareValuesBy(this,other,{it.name},{it.age})
}
}

您在这里想要实现什么?为什么你认为语法会起作用?你说“得到错误的结果”是什么意思?@TimCastelijns我认为成员变量可以做什么,lambda可以做什么,所以我想转换它。@ciiling
val person=listOf(person(“Bob”),person(“Bob”,20),person(“Bob”,12)
println(person[0]>person[1])
您需要使用
it.name
,而不是
name