錯誤在第二的println之後不可能:智能投給「布爾」是價值做作
智能投地「布爾」是不可能的,因爲「r.isSquare」是,本來是 可變屬性這個時候
fun main(args: Array<String>) {
val r: Rectangle = Rectangle(5,5)
println(r.isSquare)
r.isSquare = true
println(r.isSquare) // error but works with println(r.isSquare?:false)
}
data class Rectangle(var height: Int, var width: Int){
var isSquare: Boolean? = null
}
如果是空的改變,但將打印空像第一的println,爲什麼我要這麼做?
編輯2
感謝您的回答,我現在明白了: 第一的println是
println(message: Any?)
其次是的println
println(message: Boolean)
因爲r.isSquare =真正讓編譯器信任isSquare是布爾值而不是布爾值?
EDIT2
這裏是我如何處理,編譯器,以保持信任isSquare是布爾?
fun main(args: Array<String>) {
val r: Rectangle = Rectangle(5, 5)
println(r.isSquare)
r.isSquare = true as Boolean? // if no cast, he will try wrong println signature
println(r.isSquare)
}
data class Rectangle(var height: Int, var width: Int){
var isSquare: Boolean? = null
}
[Smart cast to'Type'的可能重複是不可能的,因爲'變量'是一個可變的屬性,可以在這個時候改變](https://stackoverflow.com/questions/44595529/smart-cast-因爲變量是一個可變的財產,臨) –