1)
require 'sqlite3'
db = SQLite3::Database.new('development.sqlite3')
db.results_as_hash = true;
rows = db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ")
rows do |row|
id_num = row['id']
puts "Id = #{id_num}"
dupe_name = row['name']
puts "name = #{dupe_name}"
dupe_tel = row['telephone']
puts "tel = #{dupe_tel}"
dupe_lat = row['latitude']
puts "lat = #{dupe_lat}"
dupe_long = row['longitude']
puts "lat = #{dupe_long}"
puts '===end===='
end
2)
require 'sqlite3'
db = SQLite3::Database.new('development.sqlite3')
db.results_as_hash = true;
db.execute(" SELECT * FROM listings WHERE name = '' OR telephone = '' OR latitude = '' OR longitude = '' ") do |row|
id_num = row['id']
puts "Id = #{id_num}"
dupe_name = row['name']
puts "name = #{dupe_name}"
dupe_tel = row['telephone']
puts "tel = #{dupe_tel}"
dupe_lat = row['latitude']
puts "lat = #{dupe_lat}"
dupe_long = row['longitude']
puts "lat = #{dupe_long}"
puts '===end===='
end
第二个有效,第一个无效。
为什么会这样呢? db.execute
函数不返回结果集。如果是这样为什么你不能循环它?
最佳答案
您是否尝试过将第一个函数的 rows do |row|
更改为 rows.each do |row|
?
通过第一个,您将获得一个集合并将其分配给行
。您需要为之后的行创建一个迭代器,以便循环遍历集合。
第二个函数,. execute已经返回一个迭代器。
关于ruby - Ruby 函数的这两种实现有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918610/