다음 예제는 객체 식의 타입이 익명 객체 타입이며, 지역 변수나 프로퍼티의 타입도 마찬가지일 수 있음을 보여준다.
fun main() {
val o = object { // 익명 객체 타입이 추론됨
val x = readLine()!!.toInt()
val y = readLine()!!.toInt()
}
println(o.x + o.y) // 여기서 o 안의 x와 y에 접근할 수 있음
}
하지만 익명 객체 타입은 지역 선언이나 비공개 선언에만 전달될 수 있다. 예를 들어 midPoint 함수를 최상위 함수로 정의하면 객체 멤버에 접근할 때 컴파일 오류가 발생한다.
fun midPoint(xRange: IntRange, yRange: IntRange) = object {
val x = (xRange.first + xRange.last)/2
val y = (yRange.first + yRange.last)/2
}
fun main() {
val midPoint = midPoint(1..5, 2..6)
// error: unresolved reference: x
// error: unresolved reference: y
println("${midPoint.x}, ${midPoint.y}")
}