我正在创建一个游戏,以便练习一些基本的Ruby。在我的二十一点游戏中,我创造了一副牌来画画。我设法混合阵列,从该阵列中抽取并从原始卡阵列中删除两张卡的唯一方法如下:
function monthlyIceCreamSalesReport (scope, cb){
var connObj = connConfig();
connObj.conn.connect(function(err){
if(err){
console.log(err);
return cb(Error("Something wrong"));
}
connObj.req.input('Month',4);
connObj.req.input('Year',2016);
connObj.req.execute('<myStoredProcedure>', function(err, recordsets, returnValue){
if(err){
console.log(err);
connObj.conn.close();
return cb(Error("Something wrong"));
}
else {
console.log(recordsets[0]); // successfully receiving the value
connObj.conn.close();
return cb(recordsets[0]);
}
});
});
}
var sqlServerObj = {
monICSalesReport : monthlyIceCreamSalesReport,
};
module.exports = sqlServerObj;
我试着像这样使用shift和pop以及shuffle:
player_cards = cards.shuffle!.shift(2)
在IRB中,如果我使用pop和shift而不是shuffle,那么我试图从(哈希数组)中拉出的数组会从牌组中移除那些牌。一旦我添加随机播放,卡片就不再永久地从卡座上移除。我必须使用shuffle!为了完成我的任务。
我想知道的是,为什么不随着洗牌而按预期弹出和转移工作?我对Ruby中链接的基本理解是,卡片阵列首先被洗牌并返回,然后删除了数组中的元素。
我唯一想到的是我的错误可能是shuffle洗牌并返回一个洗牌阵列,但不是原来的卡阵列。当我从洗牌阵列中弹出或移动一张或两张牌时,它是由shuffle返回的数组,而不是原始的卡阵列。那是对的吗?
答案 0 :(得分:1)
cards.shuffle
和cards.shuffle!
之间存在显着差异(撞击版本。)
前者创建一个新数组,而后者会改变原来的。
也就是说,后面的代码shift
和pop
来自原始数组的副本,由shuffle
生成。