2012-03-29 79 views
2

1)这两个Ruby函数的实现有什么区别?

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 

第二届一个工程和1号一个没有。

这是为什么? db.execute函数不返回结果集。如果是的话,为什么你不能循环呢?

回答

4

您是否尝试将rows do |row|更改为rows.each do |row|作为第一个函数?

第一个获得一个集合并将它分配到rows。你需要为之后的行创建一个迭代器来循环收集。

第二个函数,。 execute已经返回一个迭代器。

More on Iterators

+0

Aha。我现在明白了。非常感谢 – banditKing 2012-03-29 05:38:13