簡體   English   中英

在方括號中使用Array#shift(Ruby)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM