什么';Kotlins背后的真正意图也是作用域函数
我在问我自己,语言设计者在“还什么';Kotlins背后的真正意图也是作用域函数,kotlin,Kotlin,我在问我自己,语言设计者在“还作用域函数”背后的意图是什么,以及是否几乎所有人都在滥用它 如果在堆栈溢出上搜索Kotlins作用域函数的示例,您将得到以下公认的答案: 的给定答案也是{} 另外-当您想使用“应用”,但不想使用阴影时,请使用它 这个 班级果篮{ 私有变量权重=0 fun addFrom(appleTree: AppleTree) { val apple = appleTree.pick().also { apple -> this.weight +=
作用域
函数”背后的意图是什么,以及是否几乎所有人都在滥用它
如果在堆栈溢出上搜索Kotlins作用域函数的示例,您将得到以下公认的答案:
的给定答案也是{}
另外-当您想使用“应用”,但不想使用阴影时,请使用它
这个
班级果篮{
私有变量权重=0
fun addFrom(appleTree: AppleTree) {
val apple = appleTree.pick().also { apple ->
this.weight += apple.weight
add(apple)
}
...
}
...
fun add(fruit: Fruit) = ... }
在这里使用apply将对此进行阴影处理,以便this.weight将引用
苹果,而不是果篮
这也是我经常看到的用法。但是,如果我查看一下
同样
也适用于执行采取上下文对象的某些操作
作为参数。也可用于不改变
对象,例如记录或打印调试信息。通常
也可以从调用链中删除的调用,而不会中断
程序逻辑
从这个角度来看,给定的示例是错误的,因为如果删除它,它会破坏程序逻辑。对我来说,也是一种Javaspeek
(),它就在那里,但不应该用于生产性程序逻辑
有人能给我一些启发吗?在就Reddit这个主题进行了较长时间的讨论之后,文档在某种程度上进行了调整,就像句子一样
通常,您也可以从调用链中删除的调用,而无需
破坏程序逻辑
已删除。请参阅相应的PR:在对Reddit进行了关于此主题的较长时间讨论后,文档进行了调整,调整方式如下:
通常,您也可以从调用链中删除的调用,而无需
破坏程序逻辑
已删除。请参阅相应的PR:他们说如果您正在对对象执行操作,而不是对其执行操作(配置它),从语义上讲,将其视为参数而不是接收者更有意义。上面的示例完全符合这一想法。但该示例也是这样一种情况,即没有scope函数,代码将更加简洁易读。如果函数还返回了apple,因此您没有将其分配给val
。但是最后一句话呢,这些调用通常可以在不破坏程序逻辑的情况下被删除?如果我从示例中删除add调用,结果将不再相同。我明白了,我想这不符合这样的想法,即它只用于在一侧进行一些日志记录。上面的示例有点像一个点SS使用它,但可能有助于缩短一个简单函数的代码,它可以检索一些东西,用它做一些事情,然后返回它。但是我猜想<>代码> 可以被认为是一种更可读的方法。我认为原始的意图也是在一个函数编程链的中间记录日志。一个没有中断的集合。他们说如果你正在对一个对象做一些事情,而不是对它做一些事情(配置它),从语义上讲,将其视为参数而不是接收者更有意义。上面的示例完全符合这一想法。但该示例也是这样一种情况,即没有scope函数,代码将更加简洁易读。如果函数还返回了apple,因此您没有将其分配给val
。但是最后一句话呢,这些调用通常可以在不破坏程序逻辑的情况下被删除?如果我从示例中删除add调用,结果将不再相同。我明白了,我想这不符合这样的想法,即它只用于在一侧进行一些日志记录。上面的示例有点像一个点SS使用它,但可能有助于缩短一个简单函数的代码,它可以检索一些东西,用它做一些事情,然后返回它。但是我猜想<>代码> 可以被认为是一种更可读的方法。我认为原始的意图也是在一个函数编程链的中间记录日志。没有中断的收集。