首页 > 解决方案 > Kotlin 标准函数:run、with、let、also 和 apply

问题描述

我试图了解函数的正确使用(运行、使用、让、应用)。假设我们有以下初始代码(我将其用于测试目的):

con = urlGet.openConnection() as HttpURLConnection
con.readTimeout = 10000
con.connectTimeout = 2000 
con.requestMethod = "GET"
con.doInput = true
con.connect()
inst = con.inputStream

根据这张图片,我将其修改为:

con = urlGet.openConnection() as HttpURLConnection
inputStream = con.run {
   readTimeout = 10000
   connectTimeout = 2000
   requestMethod = "GET"
   doInput = true
   // Start the query
   connect()
   inputStream
}

但根据我发现的一些指南,我认为我在那里做多项“工作”。

所以,我觉得这更正确:

    con = urlGet.openConnection() as HttpURLConnection
    con.apply {
           readTimeout = 10000
           connectTimeout = 2000
           requestMethod = "GET"
           doInput = true
        }
    inputStream = con.run {
           // Start the query
           connect()
           inputStream
        }

这些功能是否如此严格分开?
是否有关于如何使用这些功能的指南(官方或非官方)?

标签: kotlin

解决方案


根据您应该使用的官方指南run,因为您从块返回不同的值。所以你的第一个代码是正确的:

con = urlGet.openConnection() as HttpURLConnection
inputStream = con.run {
   readTimeout = 10000
   connectTimeout = 2000
   requestMethod = "GET"
   doInput = true
   // Start the query
   connect()
   inputStream
}

推荐阅读