gpt4 book ai didi

java - def 关键字的 Groovy 开销

转载 作者:行者123 更新时间:2023-12-01 09:37:19 25 4
gpt4 key购买 nike

不确定这是否是一个正确的问题,但我想知道 def 的 Groovy 关键字(以及其他动态或可选类型语言的等效项)。

此类内容的一个有用或不错的用法是,您可以将一种类型的值分配给变量,然后将其更改为另一种类型。

例如,假设您从前端获得了两个时间戳的映射,表示日期范围

def filters = [
from: from,
to : to
]

然后,当您进行一些验证时,您希望将日期对象中的日期范围传递给 DAO 以进行 SQL 查询,因此您可以执行如下操作

if(filters.from && filters.to) {
def normalizedDateRange = DateUtil.buildDateRange(filters.from, filters.to, maxRangeDays)
filters.from = normalizedDateRange.from
filters.to = normalizedDateRange.to
}

这是可以接受的,您无需创建具有非常相似名称或类似名称的第二张 map 。我的问题是,这是否会导致此类语言产生过多的开销,这是否是它们比 JAVA 慢的原因之一。

有些人说你可以将 def 视为在 Java 中使用 Object,因此它分配足够的空间来存储任何内容,或者它可能存储一个引用,当你存储不同的内容时,它只是释放它所占用的空间并重新分配新空间,只是更新引用?

通过在这里创建一个新的对象/ map 并在那里存储新值,我会得到什么吗?或者 yield 太小以至于最好利用 Groovy 的糖语法和“作弊”?

最佳答案

def 会更轻,因为它只是一个空引用,稍后可能很容易被垃圾收集。

通过将变量存储在映射中,您可以将值存储在计算哈希码等的特定结构中 1 2 。会更重。

当然, map 具有出色的功能,人们不应该仅仅基于性能而忽视这一点,而不检查它是否是真正的瓶颈。你可以尝试写一个 microbenchmark .

关于java - def 关键字的 Groovy 开销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38768525/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com