Why's Poignant Guide to Ruby を読んでいて、クラス変数とインスタンス メソッドを String クラスに追加するこのコード例に出くわしました。アイデアは、"Paij-Ree" のようなエイリアンの名前の文字列が与えられた場合、次のようなものを実行できるということです。
"Paij-ree".determine_significance # returns "Personal AM"
コードは次のとおりです。
class String
@@syllables = [
{ 'Paij' => 'Personal',
'Gonk' => 'Business',
'Blon' => 'Slave',
'Stro' => 'Master',
'Wert' => 'Father',
'Onnn' => 'Mother' },
{ 'ree' => 'AM',
'plo' => 'PM' }
]
# a method to determine what a certain
# name of his means
def determine_significance
parts = self.split( '-' )
syllables = @@syllables.dup
signif = parts.collect do |p|
syllables.shift[p]
end
signif.join( ' ' )
end
end
私の質問: Array#shift メソッドの後に角かっこがある収集ブロックで何が起こっていますか? 次のように使用されている例しか見つけることができませんでした。
letters = ['a','b','c']
letters.shift # returns "a"
何が起きてる?
syllables.shift[p]