Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Beginner question

Reply
Thread Tools

Beginner question

 
 
Mikael Larsson
Guest
Posts: n/a
 
      07-04-2004
Hi

I wrote about Ruby a year ago, I find it intersting, so I bought "Hal
Fulton's" book "the Ruby way", but I haven'thad time to read it until now.

Tho book is really good, but the writer don't explain this construction (from
page 81) (or I haven't found the explanation):

class String
def rot13
self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
end
end

str = "Micke"

puts "#{str} become #{str.rot13()}" #Micke become Zvpxr
puts "#{str} become #{str.rot13()}" #Zvpxr become Micke
puts "#{str} become #{str.swapcase()}" #Micke become mICKE

For me looks like we are doing some implicit inherence here, like this:
class String < String
def rot13
self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
end
end

Dose any one have a good explanation?

Regards,
Mike


 
Reply With Quote
 
 
 
 
Michael Geary
Guest
Posts: n/a
 
      07-04-2004
Mikael Larsson wrote:
>
> class String
> def rot13
> self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
> end
> end
>
> str = "Micke"
>
> puts "#{str} become #{str.rot13()}" #Micke become Zvpxr
> puts "#{str} become #{str.rot13()}" #Zvpxr become Micke
> puts "#{str} become #{str.swapcase()}" #Micke become mICKE
>
> For me looks like we are doing some implicit inherence here, like this:
> class String < String
> def rot13
> self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
> end
> end
>
> Dose any one have a good explanation?


What you're seeing is the fact that you can reopen a class and add new
methods to it at any time. Your String class doesn't inherit from the
original String class; it *is* the original String class. You're adding a
new method to that class.

Try this example for comparison:

###

class Test
def a
123
end
end

test = Test.new
p test.a

class Test
def b
a
end
end

p test.a
p test.b

###

-Mike


 
Reply With Quote
 
 
 
 
Hal Fulton
Guest
Posts: n/a
 
      07-04-2004
Mikael Larsson wrote:

> Tho book is really good, but the writer don't explain this construction (from
> page 81) (or I haven't found the explanation):
>
> class String
> def rot13
> self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
> end
> end


[snip]

> For me looks like we are doing some implicit inherence here, like this:
> class String < String
> def rot13
> self.tr!("A-Ma-mN-Zn-z", "N-Zn-zA-Ma-m")
> end
> end
>
> Dose any one have a good explanation?


Hi, Mikael...

I think you're failing to understand that Ruby's classes are "open" --
i.e., all we're doing here is adding a new method to the String class.

All instances of String have access to that method once you add it.
(Even the ones that existed before the method was added.)

Does that help any?


Hal



 
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
Beginner's Beginner william nelson Ruby 7 04-11-2011 11:23 PM
beginner's question.. Scott Needham Wireless Networking 4 09-06-2005 12:52 AM
No Class at ALL!!! beginner/beginner question =?Utf-8?B?S3VydCBTY2hyb2VkZXI=?= ASP .Net 7 02-03-2005 02:47 PM
Tutorial for beginner/ Tutorial voor beginner Rensjuh C++ 7 09-02-2004 12:41 AM
Beginner question: What trigs processes Jerker Hammarberg VHDL 16 07-22-2003 03:58 PM



Advertisments