当前位置: 首页 > 知识库问答 >
问题:

Kotlins还有作用域函数背后的真正意图是什么

许琛
2023-03-14

我在问我自己,语言设计者在“还作用域函数”背后的意图是什么,以及是否几乎所有人都在滥用它。

如果在堆栈溢出上搜索Kotlins作用域函数的示例,您将得到以下公认的答案:https://stackoverflow.com/a/45977254/5122729

的给定答案也是{}

另外,当您想使用apply,但不想对其进行阴影处理时,请使用它

类水果篮子{私有var权重=0

fun addFrom(appleTree: AppleTree) {
    val apple = appleTree.pick().also { apple ->
        this.weight += apple.weight
        add(apple)
    }
    ...
}
...
fun add(fruit: Fruit) = ... }

使用apply-here将对其进行阴影处理,以便。重量指的是苹果,而不是果篮。

这也是我经常看到的用法。但是如果我看一下kotlinlang的文档。他们明确表示:

同样适用于执行将上下文对象作为参数的某些操作。还可用于不改变对象的其他操作,如记录或打印调试信息。通常,您也可以在不中断程序逻辑的情况下从调用链中删除的调用。

从这个角度来看,给定的示例将是错误的,因为如果将其删除,它将破坏程序逻辑。对我来说,也是一种Javaspeek(doc),它在那里,但不应该用于生产性程序逻辑。

有人能开导我一下吗?


共有1个答案

黄和怡
2023-03-14

在Reddit上对这个话题进行了更长时间的讨论后,留档在某种程度上被调整为句子

通常,您也可以在不中断程序逻辑的情况下从调用链中删除的调用。

被移除。见相应的PR:https://github.com/JetBrains/kotlin-web-site/pull/1676

 类似资料:
  • FindBugs引发一个名为EI_EXPOSE_REP的bug,其描述如下: EI:可以通过返回对可变对象的引用来公开内部表示 返回对存储在对象字段之一中的可变对象值的引用将公开该对象的内部表示形式。如果实例由不受信任的代码访问,并且对可变对象的未经检查的更改会危及安全性或其他重要属性,则需要执行不同的操作。在许多情况下,返回对象的新副本是更好的方法。 这背后真正的威胁是什么? 如果是恶意代码问题

  • 问题内容: 假设我有“主题”表 和相关的映射对象, 当我尝试保存具有重复的“名称”且没有定义“ unique = true”的对象时,我得到了类似的行为(相同的异常。)很明显,除非向DB伸出援手,否则JPA实现无法真正做任何事情检查。 真正的用例是什么? (我在这里假设,唯一约束也是在数据库级别定义的。) 问题答案: 在如果你让你的JPA提供者为您创建数据库只使用- 这将在指定的列上的唯一约束。但

  • 根据以下文章:wolfram Mandelbrot集,我试图了解他们是如何精确地计算

  • 问题内容: 众所周知,某些Python的数据结构使用 哈希表 存储诸如或的项目。因此,这些对象没有顺序。但似乎,对于某些数字序列,这是不正确的。 例如,请考虑以下示例: 但是,如果我们进行一些小的更改,则无法排序: 所以问题是:Python的哈希函数如何在整数序列上工作? 问题答案: 尽管SO的问题及其顺序有很多问题,但没有人解释哈希函数的算法。 因此,这里您所需要的就是知道python如何计算哈

  • 本文向大家介绍javascript的函数作用域,包括了javascript的函数作用域的使用技巧和注意事项,需要的朋友参考一下 在一些类似c语言的编程语言中,花括号内的每一段代码都具有各自的作用域,而且变量在声明他们的代码段之外是不可见的,我们称为块级作用域(block scope),而javascript中没有块级作用域。取而代之的javascript使用的是函数作用域(function sco

  • 问题内容: 最近,我通过Crockford的JSLint运行了一些JavaScript代码,它给出了以下错误: 第1行第1个字符处的问题:缺少“使用严格”语句。 通过搜索,我意识到有些人将其代码添加到了JavaScript中。添加语句后,错误停止出现。不幸的是,谷歌没有透露此字符串语句背后的许多历史。当然,它一定与浏览器如何解释JavaScript有关,但是我不知道会有什么影响。 那么到底是什么,