ruby - 使用带有方括号的 Array#shift (Ruby)

标签 ruby shift

我正在阅读 Why 的《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 方法后面有方括号的收集 block 中发生了什么?我只能找到这样使用它的示例:

letters = ['a','b','c']
letters.shift  # returns "a"

这是怎么回事?

syllables.shift[p]

最佳答案

它正是这样做的。 @@syllables 是一个哈希数组,因此它将第一个值移出数组,该值是一个哈希值。然后它使用分割字符串作为键来访问它。

self.split( '-' ) 返回一个字符串数组,并使用 collect 进行映射,以将其替换为哈希中的值。

重要的是,数组是重复的,以避免破坏原始的@@syllables,以便您可以移动重复项。

关于ruby - 使用带有方括号的 Array#shift (Ruby),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14572273/

相关文章:

C 数循环移位错误答案

ruby-on-rails - 加载 View 后的 Rails 运行方法

ruby-on-rails - 我如何告诉 Rails 如何正确地大写首字母缩写词?

ruby-on-rails - 乘客 bundler /设置 LoadError

java - java中的位运算

java - 切换到循环列表以更轻松地移动

ruby-on-rails - 重命名的 active_admin 资源的可选 belongs_to

ruby-on-rails - rails bin/rails 文件如何/做什么

assembly - 68k/x86 上的左移溢出?

perl - 'shift' 对处理 Perl 子程序参数是否有害?