Rubyの読み取り専用配列

概要

C# または Java のクラスから不変のコレクションを返す必要がある場合、それを IEnumerable インターフェイスとして返します。 Ruby でこれを行う標準的な方法は何ですか?クローン?氷結?

解決策

変更を試みたときに RuntimeError を発生させたい場合は、freeze() を使用します。呼び出し元がデータを変更できないようにしたいだけの場合は、 clone() が良い選択です。

freeze() は期待どおりに動作しない可能性があることに注意してください。表面層を変更から保護するだけであり、解凍はありません。

個人的には、freeze() が必要になったことはありませんが、clone() は便利なことがよくあります。