gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:39:18 27 4
gpt4 key购买 nike

我正在阅读 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 方法之后有方括号的 collect 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com