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

我想知道这些语言功能的真实用途是什么。根据我的经验,一切都可以用静态类型的语言来完成,但我有时并不是很聪明。我想我已经想出了继续阅读的美丽/兴趣来自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 = #<User id:1, username: 'joe', ...
current_resource = #<Comment id:20, ...
user.owns?(current_resource) = false

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

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top