ruby中绑定对象的实际使用

ruby中绑定对象的实际使用,ruby,computer-science,Ruby,Computer Science,昨晚,我在想我认为是高级ruby语言特性,即Continuations(callcc)和Binding对象。我指的是高级,因为我有一个静态类型的oo语言背景(C#,Java,C++),我最近发现了ruby,所以这些语言特性对我来说不是很熟悉 我想知道这些语言功能的实际用途是什么。根据我的经验,任何事情都可以用静态类型的oo语言来完成,但有时我并不十分聪明。我想我明白了继续读Sam Ruby的那篇好文章的好处/兴趣: 不过,我还是迷恋绑定对象。有人能给我提供一些现实世界中的例子,说明可以巧妙地使用

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

我想知道这些语言功能的实际用途是什么。根据我的经验,任何事情都可以用静态类型的oo语言来完成,但有时我并不十分聪明。我想我明白了继续读Sam Ruby的那篇好文章的好处/兴趣:

不过,我还是迷恋绑定对象。有人能给我提供一些现实世界中的例子,说明可以巧妙地使用Binding对象,但不能非常巧妙地使用缺少ruby绑定概念的langages吗

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


提前感谢您的帮助。

当您需要评估时,绑定对象非常有用。

我使用了绑定类来实现调试

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

user=#看看,这是一个smalltalk web应用程序框架。它广泛使用连续体。关于如何使用它的最好的现实例子是CMS,你能再详细一点吗?我不明白你的意思。@SylvainPrat:ERB#result方法接受一个
绑定
对象。您可以使用内核方法
binding
,直接在
my_template中调用。result(binding)
——在当前上下文中执行模板中的Ruby代码)谢谢您的回答,但我的问题更多的是关于绑定对象而不是continuation;)谢谢这是对的!实现调试功能似乎是绑定对象的一种用途。我想知道这个调试特性是否在pickaxe书中作为绑定的一个示例进行了记录。你能看到绑定对象的其他用途吗?@dhruv这很巧妙。我想我会把它添加到我的实用程序包中,就在putsv(如果是verbose的话,就放在putsv)旁边。。。谢谢