Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Code explanation requeted

Reply
Thread Tools

Code explanation requeted

 
 
Neville Franks
Guest
Posts: n/a
 
      02-05-2007
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.getsoft.com http://www.surfulater.com

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

 
Reply With Quote
 
 
 
 
dblack@wobblini.net
Guest
Posts: n/a
 
      02-05-2007
Hi --

On Tue, 6 Feb 2007, Neville Franks wrote:

> 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"?


It is a class; it's the singleton class of log. You may join the club
of people who want a singleton_class method That would make it:

log.singleton_class.__send__(:define_method, :to_int) ...

As it stands, in order to address the singleton class as an object,
you have to capture it through the technique of:

class << log
self
end

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

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)

 
Reply With Quote
 
 
 
 
gwtmp01@mac.com
Guest
Posts: n/a
 
      02-06-2007

On Feb 5, 2007, at 6:39 PM, http://www.velocityreviews.com/forums/(E-Mail Removed) 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




 
Reply With Quote
 
Neville Franks
Guest
Posts: n/a
 
      02-06-2007
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.getsoft.com http://www.surfulater.com

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

 
Reply With Quote
 
Marcello Barnaba
Guest
Posts: n/a
 
      02-06-2007
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/chapter04.html

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

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Explanation on some code Michael Albers Ruby 5 12-01-2008 06:18 PM
looking for explanation of bind2nd() source code responsible C++ 4 08-05-2008 03:51 PM
Need help understanding this part of code. Explanation in post(2008-04-18) patrick@patrick-isp.com Javascript 1 04-18-2008 05:10 AM
JCP code- can anybody gve explanation uthra Java 1 11-10-2006 09:04 PM
Explanation of code needed Phil Thompson Javascript 4 03-22-2005 05:55 PM



Advertisments