最近对Julia中集合的许多常见操作(例如从集合中删除项目)进行了重命名,旧函数已弃用。
例如,
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!
为什么要重命名?正在追加!现在改变集合状态的函数是一个约定吗?
答案 0 :(得分:9)
您可以阅读julia-dev
主题here。基本上,它只是改为尊重arrays文档中描述的规则:
最后一个函数fill!与修改现有函数不同 数组而不是构造一个新数组。作为惯例,功能 使用此属性的名称以感叹号结尾。这些 函数有时被称为“变异”函数,或“就地” 功能
FWIW我认为这是个好主意,至少对于Base
。
答案 1 :(得分:7)
!
的使用始终是表明突变的明确惯例,直到最近它才被正确执行。对于push
,人们可以轻易地争辩说这不是必需的。但是使用push!
代替push
可以清楚地表明,在这种情况下发生突变的方式与使用sort!
时发生突变的方式完全相同,这与{{1}非常不同}。
这种感叹号约定存在于Scheme和Ruby以及其他几种语言中。它不存在于像R这样的语言中,它不允许人们在不依赖于语言的潜在内容的情况下执行变异。