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

标签 coding-style julia

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/

相关文章:

ruby - 一行 `if` return 语句有两个 Action

php - 编程方法理论。何时编写单一用途函数?

c# - StyleCop 和/或一般风格指南?

java - 为 Sql 构造动态搜索条件的最佳方法

java - 为什么 '//' 样式的多行注释不好(在 Java 中)?

parallel-processing - Julia:远程工作人员的 SharedArray 变成一个 0 元素数组

julia - 如何在 Julia 中实现 SingleLinkedList

for-loop - 如何将 Julia for 循环返回保存在数组或数据帧中?

c - 我们如何从 Julia 调用 primesieve C 库?

julia - 如何从 Julia 的二进制文件中读取特定元素?