6

Set からアイテムを削除するなど、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!

なぜこれらは改名されたのですか?! を追加しています コレクションの状態を変更する関数は慣習になりましたか?

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 に答える