如果有人能爲我闡明一個燈,或者用PHP風格的代碼展示一個等價的(如果存在的話),我真的很喜歡它。塊做什麼?
這段代碼:
require 'sqlite3'
SQLite3::Database.new("metadata.db").execute("SELECT * from BOOKS") do |row|
puts row
end
使用execute
方法來發出SQL查詢。它正在做一個循環,但在什麼?在該查詢的返回值?你可以追加一段代碼到任何表達式,它會在其返回值上工作嗎?似乎循環沒有連接任何東西,並且從零開始出現|row|
。
爲了進行比較,在PHP訪問數據庫時我會寫
$db = new mysqli('details');
$results = $db->query("SELECT * FROM books");
while ($row = $results->fetch()) {
echo $row[0];
}
它說創建一個數據庫,存儲查詢作爲results
的結果,然後開始一個循環,其中該結果的每一行被轉換成一個數組來訪問數組符號。那不是Rubyrian會怎麼做的嗎?這裏發生了什麼?
這不是紅寶石主義者會怎麼做的,因爲它冗長而醜陋。塊不會自動在返回值上工作。這種類型的操作在很多Ruby教程中都有討論,也許最好從這裏開始。你也可以搜索諸如「編寫範圍塊的ruby方法」之類的東西,這樣你就可以看到如何做你自己的,這可能更具教育意義。 –
許多JS庫使用類似的技術,順便說一句,但有一個功能,而不是一個塊。它非常相似。 –
考慮將塊作爲參數傳遞給方法的算法,方法可以執行它。塊可能有一些參數,方法應該在調用時傳遞值來阻止。爲什麼不讀一些關於Ruby的書? – taro