如何初始化lambda中的var

时间:2017-01-31 20:04:59

标签: kotlin

我一直碰到这样的情况:

    var allData: List<ResponseData>

    FileInputStream(dataPath).use { input ->
        // allData is initialized here
        allData = ResponseData.parse(input)
    }

    // Kotlin can't tell that allData was initialized
    useAllData(allData)

我认为,问题在于,Kotlin不知道传递给use的lambda何时会被调用,因此无法知道变量是否在到达{{1}时被初始化}}。我怀疑这只是一个没有良好解决方法的限制,但我希望有人能够优雅地初始化这些块中的事物(例如useAllDatause等。)

1 个答案:

答案 0 :(得分:2)

Kotlin的use返回结果,您可以将结果直接分配给变量以避免此类问题。 e.g:

var allData: List<ResponseData> = FileInputStream(dataPath).use { input ->
    // allData is initialized here
    ResponseData.parse(input)
}

// Kotlin can now tell that allData was initialized
useAllData(allData)