2010-12-15 75 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