Beginner question

M

Mikael Larsson

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
 
M

Michael Geary

Mikael said:
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
 
H

Hal Fulton

Mikael said:
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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,743
Messages
2,569,478
Members
44,899
Latest member
RodneyMcAu

Latest Threads

Top