私はKotlinに慣れるためにKotlin Koansのテストをしています。あるテストでは、compareTo
メソッドをオーバーライドする必要があります。最初のケースのすべての仕事で、私は少し違った私はコンパイルエラーのトンを取得compareTo
を書いている第二の場合には今Kotlin関数の構文
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) {
operator fun compareTo(other: MyDate)= when {
year != other.year -> year - other.year
month != other.month -> month - other.month
else -> dayOfMonth - other.dayOfMonth
}
}
を意図したとおり。
data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) {
operator fun compareTo(other: MyDate){
when {
year != other.year -> return year - other.year
month != other.month -> return month - other.month
else -> return dayOfMonth - other.dayOfMonth
}
}
}
まず第一に、オペレータのキーワードで、私はエラーを取得する:
'operator' modifier is inapplicable on this function: must return Int
及びこれらのエラーがあるため発生し、なぜ私は
Type mismatch: inferred type is Int but Unit was expected
を得るリターンで私が理解することはできません最初の実装では同じものが返されますInt
s
これは少しオフがある:あなたはこの少し短くすることができます。 'fun someFunction(a:Type){}'( '='なしで)を書くと、Kotlinは戻り値の型が 'Unit'であると常に推測します。彼が 'いつ'の前に '戻り'を持っているのか、それとも内部にあるのかは関係ありません。 – marstran
最後のコメントをフォローアップする。彼が追加する必要があるのは、関数定義に対する戻り値の型( ':Int')だけです。 when式のelseブランチが完全なものになるので、 'when'の前に' return'を置く必要はありません。 – marstran
@marstran [ちょうどチェックし、あなたはリターンが必要です](https://try.kotlinlang.org/#/UserProjects/dcmc5bt52isgk4rhc2ule8toe0/s67it8ebb3i30m05j3870qqj8h) – Mibac