2012-03-29 6 views
2

1)Ruby関数のこれら2つの実装の違いは何ですか?

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が動作し、第一1にはありません。

なぜそうですか? db.execute関数は結果セットを返しません。もしそうなら、なぜあなたはそれをループすることができませんか?

答えて

4

rows do |row|rows.each do |row|に変更しようとしましたか?

最初にコレクションを取得し、rowsに割り当てます。それ以降の行のイテレーターを作成して、コレクションをループする必要があります。

第2の関数。 executeは既にイテレータを返します。

More on Iterators

+0

Aha。わかった。どうもありがとう – banditKing

関連する問題