现实世界中使用ruby中的绑定对象

昨晚,我在考虑我认为的高级ruby语言function,即Continuations(callcc)和Binding对象。 我的意思是高级,因为我有一个静态类型的语言背景(C#,Java,C ++),我最近发现了ruby,所以这些语言function对我来说并不是很熟悉。

我想知道这些语言function的真实用途是什么。 根据我的经验,一切都可以用静态类型的语言来完成,但我有时并不是很聪明。 我想我已经想出了继续阅读的美丽/兴趣来自Sam Ruby的精彩文章: http : //www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons

不过,我迷失了Binding对象。 有人可以向我提供一些真实世界的例子,这些例子可以通过Binding对象巧妙地完成,但不能非常巧妙地使用缺少ruby Binding概念的语言吗?

我想在长时间运行过程中出现问题时将某些对象回滚到初始状态,但我不确定这可以用Binding对象实现,我认为可以通过在处理和替换之前克隆对象来非常巧妙地实现当处理过程中出现问题时,修改对象及其克隆。 所以这不是我认为的有效例子。

在此先感谢您的帮助。

我已经使用绑定类来实现调试hack。

class Array def debug binding each do |arg| puts "arg = #{eval(arg, binding).inspect}" end end end 

您可以使用它来检查Ruby代码片段列表以及每个片段返回的内容:

 # .. some hairy code you want to debug ... ['user','current_resource', 'user.owns?(current_resource)'].debug(binding) 

这将打印

 user = # 

我发现它对于快速调试非常有用。

我需要使用绑定对象来捕获调用debug的范围,以便在运行debug时可以在eval使用它。 可能还有其他方法可以实现这一点,但使用绑定非常简单快捷。 还有更好的例子,说明哪些绑定对象对...有用。

当您想要评估ERB模板时,绑定对象很有用。

看看http://www.seaside.st/ ,它是一个小型的Web应用程序框架。 它广泛使用延续。 关于如何使用它的最佳真实示例是CMS http://www.cmsbox.com/en/cms