2010-12-15 88 views
2

我有一個想法,迄今爲止思想失敗了,所以我想分享它,並糾正它。Ruby - 通過調用require'filename'運行迭代

我有一系列的Ruby腳本,通過添加到購物車檢查出來,通過電子商務網站來閱讀。這些腳本都是相互引用的,以保持鏈條的順暢。我想要做的是製作一個名爲Run_CheckOut.rb的Ruby文件,但可以通過調用該文件x次來運行結賬的多次迭代。

這是我第一次嘗試:

i = 0 
10.times do 
    i+= 1 
    puts "Iteration number: " + i.to_s 
    require 'Test_OrderService_SubmitCart' 
end 

當我這樣做只會調用所需的文件一次,但繼續計數我。我怎樣才能撥打所需的文件10次,或者我完全脫離了這個基礎?

+1

爲了讓你知道,'10.times do | i |'可以讓你在循環內部使用'i',從0開始並且通過9.(你的循環內部操作相同,但是那麼你不需要在循環外聲明'i'。) – 2010-12-15 22:49:05

回答

2

您正在尋找load(請注意,你需要追加.rb):

load 'Test_OrderService_SubmitCart.rb' 

相反loadrequire執行源文件一次。請參閱requirereference documentation中所做的詳細說明。

+0

賓果遊戲!謝謝! – r3nrut 2010-12-15 21:44:06

+0

'load'會告訴Ruby每次重新載入文件,但這隻能解決一個糟糕的編程習慣中的小問題。重新加載文件導致代碼重複運行只是錯誤的。 – 2010-12-16 03:27:48

4

我完全脫離了這個基礎嗎?

是的。

我想要做的是製作一個名爲Run_CheckOut.rb的Ruby文件,但能夠通過調用此文件x次的次數運行結算的幾次迭代。

require這一點的目的是使代碼可用於您的執行環境。 require只會拉一次代碼 - 再次調用它沒有任何作用。 load每次都會運行包含的腳本,但這是一個糟糕的設計選擇。

你想要的是調用源代碼文件中的某些東西。也許你想調用一個方法,或者從一個類創建一個對象。定義一個方法:

def do_something 
    # blah blah 
end 

需要在腳本頂部的文件:

require 'Test_OrderService_SubmitCart' 

,並在循環中調用方法:

i = 0 
10.times do 
    i+= 1 
    puts "Iteration number: " + i.to_s 
    do_something 
end 
+0

這是一個更好的解決方案。 – Chuck 2010-12-15 22:27:26

+0

這是一個單一的腳本。我正在尋找一種方法來全局觸發具有依賴性的幾個腳本並運行腳本的迭代。我如何設置它可能只是一個完整的設計缺陷。 – r3nrut 2010-12-16 14:22:07

0

也有一個紅寶石約定命名文件和方法 - 小寫和下劃線。 類和模塊名稱是駱駝殼。這兩個公約從不混合。

你的最終代碼看起來應該更像:

require 'order_service' 
10.times do |n| 
    puts "iteration #{n}" 
    submit_cart 
end 

公告之美。

祝你好運!

+0

我同意,但我的老闆問我,因爲我在一家.net商店工作,所以使用駱駝案件。這不取決於我,但感謝信息。 – r3nrut 2010-12-16 14:23:59