[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Calling a reader from a writer

pachl

10/14/2006 1:22:00 AM

class Test
def x
@x + '_instance'
end

def x=(v)
@x = v
self.x # also tried `x'
end
end

t = Test.new
puts t.x=('test_x')
=> test_x
puts t.x
=> test_x_instance

Why doesn't the first puts output 'test_x_instance'? I would think that
the self.x call in the writer would call the reader.

How can one call the reader from the writer method?

-pachl

3 Answers

Nobuyoshi Nakada

10/14/2006 2:00:00 AM

0

Hi,

At Sat, 14 Oct 2006 10:25:11 +0900,
clintpachl wrote in [ruby-talk:219643]:
> t = Test.new
> puts t.x=('test_x')
> => test_x
> puts t.x
> => test_x_instance

An assignment expression always returns the assigned value,
regardless of the implementation of the setter method.

--
Nobu Nakada

dblack

10/14/2006 3:03:00 AM

0

pachl

10/14/2006 9:35:00 AM

0

On Oct 13, 8:02 pm, dbl...@wobblini.net wrote:
> On Sat, 14 Oct 2006, clintpachl wrote:
> > class Test
> > def x
> > @x + '_instance'
> > end
>
> > def x=(v)
> > @x = v
> > self.x # also tried `x'
> > end
> > end
>
> > t = Test.new
> > puts t.x=('test_x')
> > => test_x
> > puts t.x
> > => test_x_instance
>
> > Why doesn't the first puts output 'test_x_instance'? I would think that
> > the self.x call in the writer would call the reader.This just came up today on IRC. I'd forgotten about it, but was
> reminded.
>
> The writer method allows you to use the assignment-like syntax:
>
> t.x = value
>
> Since the goal of this is to make the method call look and feel more
> assignment-like, and assignments return their right-hand side, the
> writer-method calls also return their right-hand side, rather than the
> last value in the method.
>
> > How can one call the reader from the writer method?
>
> You are calling the reader, but the magic rhs value overrides it. I
> haven't found any way to circumvent it.

David, you are right on. Now that I think about it, Ruby does the
natural thing. I was just experimenting and thought it was weird that
my return value was not returning. I guess I needed to step outside the
box.

-pachl