ruby - Ruby 函数的这两种实现有什么区别?

标签 ruby loops

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已经返回一个迭代器。

More on Iterators

关于ruby - Ruby 函数的这两种实现有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9918610/

相关文章:

ruby-on-rails - 在 ruby​​ 中按 block 添加

ruby-on-rails - 如何启用注册

ruby-on-rails - 当我在新项目上尝试命令 Rails Server 时,出现此错误

ruby 正则表达式 : Rejecting whole words

c# - 通过四舍五入和不超过预期的方式计算折扣

C# 在循环中为字符串赋值的最佳方式

javascript - 我怎样才能在Javascript中同时获得循环和过滤

ruby-on-rails - Rails 将选择标签设置为预定义值

javascript - 添加在 Json 对象中找到的数字

JavaScript 项目。嵌套表循环