# How to return an unmodifiable but nor frozen array?

**URL:** <https://www.ruby-forum.com/t/how-to-return-an-unmodifiable-but-nor-frozen-array/157212>\
**Category:** Ruby\
**Created:** [January 8, 2009, 3:00pm UTC](https://www.ruby-forum.com/t/how-to-return-an-unmodifiable-but-nor-frozen-array/157212 "2009-01-08T15:00:13Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![LAMBEAU\_Bernard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/5fc32e/32.png) [@LAMBEAU\_Bernard](https://www.ruby-forum.com/u/LAMBEAU_Bernard)\
**Post date:** [January 8, 2009, 3:00pm UTC](https://www.ruby-forum.com/t/how-to-return-an-unmodifiable-but-nor-frozen-array/157212/1 "2009-01-08T15:00:13Z")

</div>

Hi,

Is there a mean to obtain an unmodifiable array which is not frozen?

Assume you’re implementing a directed graph with adjacency lists. A  
node would like to expose it’s outgoing edges (to let users enjoy its  
enumerability for example) but you would like to ensure that this  
array will not be modified. A solution would be to duplicate it and I  
know that efficiency should not be my concern, but …

blambeau

---

<div class="post-metadata">

**Author:** ![LAMBEAU\_Bernard](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/5fc32e/32.png) [@LAMBEAU\_Bernard](https://www.ruby-forum.com/u/LAMBEAU_Bernard)\
**Post date:** [January 8, 2009, 3:05pm UTC](https://www.ruby-forum.com/t/how-to-return-an-unmodifiable-but-nor-frozen-array/157212/2 "2009-01-08T15:05:29Z")

</div>

You can return the array in a container, this container redirects all  
“read” operations to the array and does not redirect any “write”  
operations.

class ArrayContainer  
def initialize(array)  
@array  
end

def   
@array[idx]  
end

… and so on  
end

There is a specialized “delegate” class/module in ruby, using it should  
result in better performance than the solution in my ArrayContainer  
class.

Mfg

Markus
