Elixirの変数は本当にイミュータブルなのか?
2023-09-06 20:10:30
質問
Dave Thomas氏の著書「Programming Elixir」では、「Elixir enforces immutable data"」と書かれており、さらに次のようなことが書かれています。
Elixirでは、一度変数が[1,2,3]のようなリストを参照すると、(変数を再バインドするまで)常にその同じ値を参照することが分かっています。
これは、quot; it won't ever change unless you change it"のように聞こえるので、mutableとreboundの違いが何であるのか混乱しています。違いを強調する例があれば、本当に助かります。
どのように解決するのですか?
不変性とは、データ構造が変化しないことを意味します。例えば関数
HashSet.new
は空の集合を返しますが、その集合への参照を保持する限り、それが空でなくなることは決してありません。あなたは
ができること
しかし、Elixirでできることは、何かへの変数の参照を捨てて、新しい参照に束縛し直すことです。例えば
s = HashSet.new
s = HashSet.put(s, :element)
s # => #HashSet<[:element]>
何 できない は、明示的に再バインドすることなく、その参照の下の値が変更されることです。
s = HashSet.new
ImpossibleModule.impossible_function(s)
s # => #HashSet<[:element]> will never be returned, instead you always get #HashSet<[]>
これをRubyと対比すると、以下のようなことができます。
s = Set.new
s.add(:element)
s # => #<Set: {:element}>
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例