6

Julia 中对集合的许多常见操作(例如从 Set 中删除项目)最近被重命名,旧函数已弃用。

例如,

del(IntSet(1,2,3), 1)

现在弹出警告

WARNING: del is deprecated, use delete! instead.

一些重命名的函数:

@deprecate  push        push!
@deprecate  pop         pop!
@deprecate  grow        grow!
@deprecate  enqueue     unshift!
@deprecate  unshift     unshift!
@deprecate  shift       shift!
@deprecate  insert      insert!
@deprecate  del         delete!
@deprecate  del_all     empty!

为什么这些被重命名?正在附加一个!改变集合状态的函数现在是一种约定吗?

4

2 回答 2

9

你可以在这里julia-dev阅读主题。基本上,它只是为了尊重 数组文档中描述的规则而改变:

最后一个函数 fill! 的不同之处在于它修改现有数组而不是构造新数组。按照惯例,具有此属性的函数的名称以感叹号结尾。这些函数有时称为“变异”函数或“就地”函数。

FWIW 我认为这是一个好主意,至少对于Base.

于 2013-01-17T03:17:25.723 回答
7

的使用!始终是表示突变的明确约定,只是直到最近才正确执行。因为push,人们很容易争辩说这不是必需的。但是使用push!而不是push清楚地表明,在这种情况下发生突变的方式与使用时发生突变的方式完全相同sort!,这与 非常不同sort

这种感叹号约定存在于 Scheme 和 Ruby 以及可能的其他几种语言中。它不存在于像 R 这样的语言中,它不允许人们在不求助于语言的底层内容的情况下执行突变。

于 2013-01-18T20:38:35.610 回答