【问题标题】:Ruby - Running an iteration by calling require 'filename'Ruby - 通过调用 require 'filename' 运行迭代
【发布时间】:2011-05-26 04:54:18
【问题描述】:

我有一个想法,但到目前为止这个想法失败了,所以我想分享它并纠正它。

我编写了一系列 Ruby 脚本来浏览电子商务网站,从添加到购物车到结帐。这些脚本都相互引用以保持链条向前移动。我想要做的是制作一个名为 Run_CheckOut.rb 的 Ruby 文件,但能够通过调用此文件 x 次来运行几次结帐迭代。

这是我的第一次尝试:

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

当我这样做时,它只会调用一次所需的文件,但会继续计入 i。我怎样才能调用所需的文件 10 次,或者我完全不了解这个?

【问题讨论】:

  • 只是为了让您知道,10.times do |i| 将允许您在循环内使用i,从 0 开始到 9。(循环内部的操作方式相同,但随后你不需要在循环外声明i。)

标签: ruby count iteration


【解决方案1】:

还有一个 ruby​​ 命名文件和方法的约定 - 小写和下划线。 类和模块名称是驼峰式的。这两种约定永远不会混用。

您的最终代码应该看起来更像:

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

注意美丽。

祝你好运!

【讨论】:

  • 我同意,但我的老板要求我使用驼峰箱,因为我在 .net 商店工作。这不取决于我,但感谢您提供的信息。
【解决方案2】:

我是否完全不了解这个?

是的。

我想要做的是创建一个名为 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

【讨论】:

  • 这是一个更好的解决方案。
  • 用于单个脚本。我正在寻找一种方法来全局触发多个具有依赖关系的脚本并运行脚本的迭代。我的设置方式可能存在完整的设计缺陷。
【解决方案3】:

您正在寻找load(注意需要附加.rb):

load 'Test_OrderService_SubmitCart.rb'

load 不同,require只执行一次源文件。在reference documentation 中查看require 的详细说明。

【讨论】:

  • load 会告诉 Ruby 每次都重新加载文件,但这只能解决一个糟糕的编程习惯中的小问题。重新加载文件导致代码重复运行是错误的。
猜你喜欢
  • 2013-10-13
  • 2013-01-10
  • 2011-09-17
  • 2018-10-24
  • 2016-10-24
  • 1970-01-01
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多