kotlin - 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 对象
- 运行更多功能(连接)
- 取回另一个对象(输入流)
所以,我觉得这更正确:
con = urlGet.openConnection() as HttpURLConnection
con.apply {
readTimeout = 10000
connectTimeout = 2000
requestMethod = "GET"
doInput = true
}
inputStream = con.run {
// Start the query
connect()
inputStream
}
这些功能是否如此严格分开?
是否有关于如何使用这些功能的指南(官方或非官方)?
解决方案
根据您应该使用的官方指南run
,因为您从块返回不同的值。所以你的第一个代码是正确的:
con = urlGet.openConnection() as HttpURLConnection
inputStream = con.run {
readTimeout = 10000
connectTimeout = 2000
requestMethod = "GET"
doInput = true
// Start the query
connect()
inputStream
}
推荐阅读
- android - 有没有办法识别用于解锁/访问的指纹?
- wordpress - 为什么我的字体真棒图标不能居中对齐?
- c# - 我如何验证然后cookie在服务器端.net上是httponly
- typo3 - TYPO3 9 - 图像生成失败 - ImageMagick / GraphicsMagick 处理已启用,但执行命令返回错误
- oracle - Oracle 11.2.0.4.0 中的 SAP 自定义表设置
- r - 如何使用我的代码从网页中提取固有链接(错误:下标越界)?
- swift - 从函数内的各种循环中返回一个值
- sql - SQL 查询总和(CASE、WHEN、ELSE)
- ios - Xcode 未在 iPA 中捆绑所有启动图像
- javascript - 需要在非 es6-javascript 字符串中提取间接定义的变量名称的基于正则表达式的方法