如何在lambda中初始化一个var

我一直遇到这样的情况:

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不知道何时调用lambda函数将会被调用,所以无法知道变量是否在您使用useAllData的时候被初始化。 我怀疑这只是一个没有良好的解决方法的限制,但我希望有人有一个优雅的方式来初始化这些类型的块(如use ,等)

Kotlin的use返回的结果,您可以直接分配给一个变量,以避免这种类型的问题。 例如:

 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)