为什么 Ruby 方法不会改变原始数组?
Why won't Ruby methods mutate the original array?
我正在创建一个游戏来练习一些基本的 Ruby。在我的二十一点游戏中,我创建了一副牌来抽牌。我设法混合数组、从该数组中提取并从原始卡片数组中删除两张卡片的唯一方法如下:
player_cards = cards.shuffle!.shift(2)
我试过像这样将 shift 和 pop 与 shuffle 一起使用:
player_cards = cards.shuffle.shift
player_cards = cards.shuffle.pop
在 IRB 中,如果我在不洗牌的情况下使用 pop 和 shift,我试图从中提取的数组(哈希数组)会将这些牌从牌组中移除。一旦我添加洗牌,卡片就不再永久地从牌组中移除。我必须使用随机播放!为了完成我的任务。
我想知道的是,为什么 pop 和 shift 不能像预期的那样使用 shuffle?我对 Ruby 中链接的初步理解是,首先将卡片数组洗牌并返回,然后删除数组中的一个元素。
关于我的错误可能是什么,我唯一的想法是 shuffle 洗牌数组和 returns 洗牌数组,而不是原始卡片数组。当我从该洗牌数组中弹出或移动一张或两张牌时,它是洗牌返回的数组,而不是原始牌数组。那是对的吗?
cards.shuffle
and cards.shuffle!
(撞版)有明显区别
前者创建一个新数组,后者改变原来的。
就是说,您后面的代码 shift
s 和 pop
s 来自 copy 的原始数组,由 shuffle
生成。
我正在创建一个游戏来练习一些基本的 Ruby。在我的二十一点游戏中,我创建了一副牌来抽牌。我设法混合数组、从该数组中提取并从原始卡片数组中删除两张卡片的唯一方法如下:
player_cards = cards.shuffle!.shift(2)
我试过像这样将 shift 和 pop 与 shuffle 一起使用:
player_cards = cards.shuffle.shift
player_cards = cards.shuffle.pop
在 IRB 中,如果我在不洗牌的情况下使用 pop 和 shift,我试图从中提取的数组(哈希数组)会将这些牌从牌组中移除。一旦我添加洗牌,卡片就不再永久地从牌组中移除。我必须使用随机播放!为了完成我的任务。
我想知道的是,为什么 pop 和 shift 不能像预期的那样使用 shuffle?我对 Ruby 中链接的初步理解是,首先将卡片数组洗牌并返回,然后删除数组中的一个元素。
关于我的错误可能是什么,我唯一的想法是 shuffle 洗牌数组和 returns 洗牌数组,而不是原始卡片数组。当我从该洗牌数组中弹出或移动一张或两张牌时,它是洗牌返回的数组,而不是原始牌数组。那是对的吗?
cards.shuffle
and cards.shuffle!
(撞版)有明显区别
前者创建一个新数组,后者改变原来的。
就是说,您后面的代码 shift
s 和 pop
s 来自 copy 的原始数组,由 shuffle
生成。