为什么在Julia中重命名这些集合上的常见操作?

时间:2013-01-17 03:01:56

标签: julia

最近对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!

为什么要重命名?正在追加!现在改变集合状态的函数是一个约定吗?

2 个答案:

答案 0 :(得分:9)

您可以阅读julia-dev主题here。基本上,它只是改为尊重arrays文档中描述的规则:

  

最后一个函数fill!与修改现有函数不同   数组而不是构造一个新数组。作为惯例,功能   使用此属性的名称以感叹号结尾。这些   函数有时被称为“变异”函数,或“就地”   功能

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

答案 1 :(得分:7)

!的使用始终是表明突变的明确惯例,直到最近它才被正确执行。对于push,人们可以轻易地争辩说这不是必需的。但是使用push!代替push可以清楚地表明,在这种情况下发生突变的方式与使用sort!时发生突变的方式完全相同,这与{{1}非常不同}。

这种感叹号约定存在于Scheme和Ruby以及其他几种语言中。它不存在于像R这样的语言中,它不允许人们在不依赖于语言的潜在内容的情况下执行变异。