Ruby on rails Array.shift是否将第一个对象从数组中永久删除,还是仅在使用它时删除?

Ruby on rails Array.shift是否将第一个对象从数组中永久删除,还是仅在使用它时删除?,ruby-on-rails,ruby,Ruby On Rails,Ruby,我正在我的GamesController中创建一个游戏数组,@games=games.all 我有一个方法,可以提取数组中的第一个对象,如果今天的日期与对象的日期匹配,则将其放入变量中 def game_today? @todays_game = @games.shift if Time.now.strftime("%_m/%d")[1..-1] == @games.first.date.strftime("%_m/%d")[1..-1] end 假设我们有一个数组[1,2,3,4]

我正在我的GamesController中创建一个游戏数组,
@games=games.all

我有一个方法,可以提取数组中的第一个对象,如果今天的日期与对象的日期匹配,则将其放入变量中

def game_today?
    @todays_game = @games.shift if Time.now.strftime("%_m/%d")[1..-1] == @games.first.date.strftime("%_m/%d")[1..-1]
end
假设我们有一个数组
[1,2,3,4]

如果日期与
数组[0]
的日期匹配,并且它今天被拉出,那么该对象明天还会消失吗?换句话说,#2是新的
数组[0]
,而整个数组都是

[2, 3, 4]
或者,在完成工作后,它将恢复到
[1,2,3,4]


当我执行
array.shift

时,我想永久性地修改数组。这是永久性的,很遗憾,它不符合突变方法名以一个结尾的约定

您不应该以这种方式在请求之间共享状态

您应该在每次请求时从数据库中查询正确的记录,尝试在内存中保存所有游戏并从那里访问正确的游戏


如果要永久删除记录,需要将其从数据库中删除。

最后,我正在通过种子文件加载游戏数据,是否还需要从种子文件中删除使用.shift拖动的对象?这是如何工作的?如果您想更改数据库的内容,则需要编写更改。这与你关于数组移位行为的问题不同,如果不知道你的上下文,我无法回答这个问题。我认为最好就此提出一个新问题,因为没有这样的惯例。有一个惯例,如果有两个同名的方法,那么一个更令人惊讶的方法会得到一个爆炸。但是名为
shift
的方法具有破坏性也就不足为奇了。这个名字已经告诉你了。只是出于好奇:你可以只运行代码,看看在写这个问题所用时间的十分之一内会发生什么,更不用说等待答案的时间了。