gpt4 book ai didi

mysql - 当您请求数组时,Ruby 的 dbi select_all 会给出有趣的结果

转载 作者:行者123 更新时间:2023-11-29 14:25:29 25 4
gpt4 key购买 nike

考虑这个计划

require 'dbi'

handle = DBI.connect('DBI:Mysql:tasks', 'root', 'stupid')

handle.select_all('select * from tasks') do |row|
puts row.inspect
end

rows = handle.select_all('select * from tasks')
puts rows.inspect

select_all 的第一次调用会传递一个 block ,它使用该 block 来迭代表行,正如它所假设的那样。这是迭代的标准 Ruby 习惯用法,所以它当然有效。

第二次调用应该返回相同的数据,但一次全部返回,并打包在一个数组中。数组实际上包含的是表格的最后一行!

这是一个错误,还是我做错了什么?

最佳答案

我也是偶然发现了这个。经过大量研究后,我决定与特定语句关联的每个 DBI::Row 实例都引用相同的内存。更糟糕的是复制或克隆它没有任何区别。获得正确副本的唯一方法是将其转换为带有 .to_a 的数组,这意味着您会丢失方法:(

我不厌其烦地在 ruby​​forge 上提交了一份错误报告——不是因为我认为它会得到修复,而是因为它可能会帮助其他一些正在抓狂的傻瓜。

关于mysql - 当您请求数组时,Ruby 的 dbi select_all 会给出有趣的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11060096/

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