[英]Using Array#shift with square brackets (Ruby)
我正在閱讀《為什么要對Ruby進行Poignant指南》,然后看了這個代碼示例,其中他向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方法后的方括號中的collect塊中發生了什么? 我只能找到這樣使用的示例:
letters = ['a','b','c']
letters.shift # returns "a"
這里發生了什么?
syllables.shift[p]
正是在這樣做。 @@syllables
是一個哈希數組,因此它將第一個值移出該數組,即哈希。 然后,它使用分割字符串作為鍵來訪問它。
self.split( '-' )
返回一個字符串數組,該字符串數組與collect
映射在一起,以將其替換為哈希中的值。
重要的是數組是重復的,以避免破壞原始的@@syllables
因此您可以移動重復的數組。
這是怎么回事:
parts = self.split('-')
正在將字符串轉換為:
['Paij', 'ree'] # an Array
下一個問題塊:
signif = parts.collect do |p|
syllables.shift[p]
end
將數組['Paij', 'ree']
(parts variable)
中的每個實例傳遞到塊,並從@@syllables
變量返回匹配的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.