[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Code explanation requeted

Neville Franks

2/5/2007 11:33:00 PM

Hi, Can someone please shed some light on the following code:

---
def test_listen
s = nil
log = Object.new
class << log; self end.__send__(:define_method, :to_int) {
s.close
2
}
inet_stream do |s|
assert_raise(IOError) {
s.listen(log)
}
end
end
---

In particular the "class" statement and "self
end.__send__(:define_method, :to_int)"

Is this actually a class and where is its "end"?

I didn't know you can have a class inside a method. So I'm confused here
as well.

This code is messing up the Ruby parser I'm working on in my IDE.

---
Neville Franks, http://www.g... http://www.surf...

--
Posted via http://www.ruby-....

4 Answers

dblack

2/5/2007 11:39:00 PM

0

Gary Wright

2/6/2007 12:04:00 AM

0


On Feb 5, 2007, at 6:39 PM, dblack@wobblini.net wrote:
> What you're seeing in the code you've got is this, but strung together
> on one line without much to help you parse it visually if you don't
> already know what to expect. I would tend to write it as:
>
> (class << log; self; end).__send__ etc.

I'd add that

__send__(:define_method, :to_int)

is used instead of simply:

define_method(:to_int)

to override the private status of 'define_method'.

Gary Wright




Neville Franks

2/6/2007 3:16:00 AM

0

unknown wrote:
> ..
> What you're seeing in the code you've got is this, but strung together
> on one line without much to help you parse it visually if you don't
> already know what to expect. I would tend to write it as:
>
> (class << log; self; end).__send__ etc.
>
>
> David

Thanks David. And there I was thinking us C++ folks were good at writing
incomprehsible code. :-)

---
Neville Franks, http://www.g... http://www.surf...

--
Posted via http://www.ruby-....

Marcello Barnaba

2/6/2007 6:59:00 PM

0

On Tuesday 06 February 2007 04:15, Neville Franks wrote:
> > (class << log; self; end).__send__ etc.

> Thanks David. And there I was thinking us C++ folks were good at writing
> incomprehsible code. :-)

:) i know it may sound overkill, but if you really want to understand what the
heck these singleton/eigen classes are, this one is for you:

http://rhg.rubyforge.org/chap...

but maybe you should also read the previous chapters as well, it shouldn't
take more than some hours to have the big picture clear in your mind.

the documentation is based upon ruby 1.7.3, IIRC, and I don't know what's
changed later, but I'm sure that the overall cleanness of MRI hasn't been
altered :).


def post_scriptum; puts yield end
post_scriptum do %{
hello list! this is my first post!
lurking from some months, I learned a lot from you all!
thanks!
} end
--
pub 1024D/8D2787EF 723C 7CA3 3C19 2ACE 6E20 9CC1 9956 EB3C 8D27 87EF