我如何在Ruby on Rails中使用Procs?

时间:2011-09-21 16:54:47

标签: ruby-on-rails ruby

我在项目中使用了一些帮助器,我只是认为我可以将其视为Procs,因为它们执行非常具体的任务,并且可以由非常不同的组件使用。

我在小型Ruby项目中使用了Procs,主要是在学习语言时,我认为这是一个很好的机会来使用它们。

我的问题是,我将Procs放在Rails文件夹结构中?对此有任何指导或建议吗?它被视为良好做法吗?

2 个答案:

答案 0 :(得分:3)

我有点疑惑使用Procs而不是使用简单方法的优势是什么?所以如果你能给出一些例子,那就太好了。

无论如何:由于Procs可以存储在变量中,我会在lib文件夹中声明一个模块,并将procs定义为返回proc的变量,常量或方法。像这样的东西

module ProcContainer

  def proc_1(factor)
    Proc.new { |n| n*factor }
  end

  PROC_2 = Proc.new { |n| 2 * n }

end

将用作

gen_proc = ProcContainer.proc_1(6)
result = gen_proc(3)

other_proc = ProcContainer.PROC_2(4)

我想这个方法的优点很明显,因为每次调用它时它都会返回一个新的Proc对象,而常量只会被评估一次。

(当然你应该将命名更改为更合适的名称)

答案 1 :(得分:1)

Ruby拥有令人惊叹的块语法,所以我们倾向于支持它们而不是显式地创建块。块的缺点是它们需要在被调用方法产生它们时立即执行(procs没有那个限制)。这是出于性能原因,但您可以轻松地将块打包为proc,并将其存储在其他位置以供稍后使用,或将其传递给另一个方法。所以,即使你每天都在使用procs,你也没有真正意识到它,因为你的接口是通过块语法。