gpt4 book ai didi

coding-style - Julia 函数命名 : When should I append a bang?

转载 作者:行者123 更新时间:2023-12-04 04:11:28 29 4
gpt4 key购买 nike

Julia 风格指南 says “修改参数”的函数的名称应该以 ! 结尾。

但是,关于:

  1. 函数确实修改了它们的参数,但在返回之前将它们返回到原始状态?

  2. 返回 Task 的函数在执行时会修改参数?

  3. 返回这样一个任务的函数,但是当它完成时,参数将恢复到它们的原始状态?

他们的名字应该以 ! 结尾吗?


例如,考虑 this module寻找 exact covers使用 Knuth 的 Dancing Links Algorithm .它实现了一个 CoverSet 类型,可以用子集填充,然后查询第一个精确的封面:

set = CoverSet()
push!(set, [1, 2])
push!(set, [2, 3])
push!(set, [3, 4])
push!(set, [4, 1])

find_exact_cover(set) # returns [1, 3]

find_exact_cover 函数在搜索解决方案时临时修改了 set 中的数据,但是当 find_exact_cover 返回时,set 将处于其原始状态。它应该命名为 find_exact_cover! 吗?

类似地,exact_cover_producer 返回一个生成所有精确封面的 Task,但是当 Task 完成时,set 将被恢复:

for cover in exact_cover_producer(set)
println(cover) # prints [1,3] and [2,4]
end
# By now, set is restored.

应该是 exact_cover_producer! 吗?


我知道这可能被认为是主观的,所以让我澄清一下我的要求:我想知道 Julia 社区是否有这方面的约定,理想情况下还有标准库中的示例或任何使用任一样式的包。

最佳答案

参见例如discussion at Julia commit e7ce4cba44fa3b508fd50e0c3d03f6bc5a7a5032 : 目前的约定是函数是变异,因此如果它改变了它的参数之一,则附加一个 ! 将是 == 到.

(但也有一些稍微宽泛的定义的理由;请参阅上述讨论。)

关于coding-style - Julia 函数命名 : When should I append a bang?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27080586/

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