# Information Hiding

**URL:** <https://www.ruby-forum.com/t/information-hiding/119730>\
**Category:** Ruby\
**Created:** [November 9, 2007, 5:51pm UTC](https://www.ruby-forum.com/t/information-hiding/119730 "2007-11-09T17:51:36Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [November 9, 2007, 5:51pm UTC](https://www.ruby-forum.com/t/information-hiding/119730/1 "2007-11-09T17:51:36Z")

</div>

Hi,

I’m quite new to Ruby, so please excuse me if this question is a bit  
silly.

Consider:

class Foo  
def initialize  
@a = []  
end

def bar§  
@a \<\< p  
end  
end

It’s nice that Ruby returns the last evaluated expression, without  
putting an explicit return. However, Foo#bar dangerously exposes the  
Foo class internals.

My question is, what is the common idiom to avoid this? Simply adding  
a return nil? def bar§; @a \<\< p; return nil; end

Thanks in advance

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [November 9, 2007, 6:42pm UTC](https://www.ruby-forum.com/t/information-hiding/119730/2 "2007-11-09T18:42:30Z")

</div>

2007/11/9, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> end  
> My question is, what is the common idiom to avoid this? Simply adding  
> a return nil? def bar(p); @a \<\< p; return nil; end

In this case I’d do

def bar(x)  
@a \<\< x  
self  
end

Because then you can nicely chain calls to #bar. Depending on  
circumstances you might even consider implementing #\<\< instead of /  
additionally to #bar.

Kind regards

robert

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [November 9, 2007, 7:07pm UTC](https://www.ruby-forum.com/t/information-hiding/119730/3 "2007-11-09T19:07:42Z")

</div>

On Nov 9, 2007, at 09:41 , Robert K. wrote:

> 2007/11/9, removed\_email\_address@domain.invalid  
> [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):
> 
> > a return nil? def bar(p); @a \<\< p; return nil; end
> 
> In this case I’d do
> 
> def bar(x)  
> @a \<\< x  
> self  
> end

Follow this advice.

> use.inject do |as, often| as.you\_can - without end

Ignore this advice.

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [November 9, 2007, 9:40pm UTC](https://www.ruby-forum.com/t/information-hiding/119730/4 "2007-11-09T21:40:43Z")

</div>

Ok, thanks a lot for the tips.
