On Wed, Jul 14, 2010 at 3:26 PM, Abder-Rahman A.
[email protected] wrote:
I have the following script that I just have only slight changes in the
hash from “Why’s poignant guide to Ruby” book:
http://pastie.org/private/ojmcfglofwloqemqmuhra
pasting it inline:
class String
@@syllables = [{‘P’ => ‘Px’,‘G’ => ‘Gx’,‘B’ => ‘Bx’,‘S’ => ‘Sx’,‘W’
=> ‘Wx’,‘O’ => ‘Ox’}, {‘R’ => ‘Rx’,‘C’ => ‘Cx’}]
def name_significance
parts = self.split(‘-’) # ‘self’ returns the current object. And,
‘split’ here means splitting based on (-)
syllables = @@syllables.dup
signif = parts.collect do |p|
syllables.shift[p]
end
signif.join( ’ ’ )
end
end
Your problem is the call to syllables.shift - it removes one element
from syllables and returns it. But it does this once per hyphen, and
syllable only has two elements, so when you say
puts “Abder-Rahman-is-my-name”.name_significance
the first time through the loop, you have:
p = Abder
syllables.shift = {“P”=>“Px”, “G”=>“Gx”, “B”=>“Bx”, “S”=>“Sx”,
“W”=>“Wx”, “O”=>“Ox”}
syllables.shift[p] =
the second time through you have:
p = Rahman
syllables.shift = {“R”=>“Rx”, “C”=>“Cx”}
syllables.shift[p] =
the third time:
p = is
syllables.shift = nil
s.rb:10:in block in name_significance': undefined method
[]’ for
nil:NilClass (NoMethodError)
2- How can I use the @@syllables? Or, more specific, what is the use of
@@syllables here while I conclude that the purpose of this modification
to the class String is to remove ‘-’?
3- Why all that code if the purpose is removing ‘-’, such that we ONLY
need self.split( ‘-’ ) in the body of name_significance here?
I have no idea what this code is intended to do
What it does do is
take in a string like “P-C” and return “Px Cx”.
Here’s the code with print statements:
class String
@@syllables = [{‘P’ => ‘Px’,‘G’ => ‘Gx’,‘B’ => ‘Bx’,‘S’ => ‘Sx’,‘W’
=> ‘Wx’,‘O’ => ‘Ox’}, {‘R’ => ‘Rx’,‘C’ => ‘Cx’}]
def name_significance
parts = self.split(‘-’) # ‘self’ returns the current object. And,
‘split’ here means splitting based on (-)
syllables = @@syllables.dup
signif = parts.collect do |p|
s = syllables.shift
puts “p = #{p}”
puts “syllables.shift = #{s.inspect}”
puts “syllables.shift[p] = #{s[p]}”
s[p]
end
signif.join( ’ ’ )
end
end
puts “P-C”.name_significance
martin