Question

Hier soir, je pensais à ce que je pense être des fonctionnalités avancées du langage ruby, à savoir les objets Continuations (callcc) et Binding. Je veux dire avancé parce que j’ai un arrière-plan oo langages statiquement typé (C #, Java, C ++), j’ai découvert le ruby ??très récemment, donc ces fonctionnalités ne me sont pas très familières.

Je me demande quelle pourrait être l'utilisation réelle de ces fonctionnalités de langages. D'après mon expérience, tout pourrait être fait avec des langues oo typées statiquement, mais je ne suis pas d'accord parfois très intelligemment. Je pense avoir compris la beauté / l'intérêt de Continuation en lisant ce bel article de Sam Ruby: http://www.intertwingly.net/blog/2005/04/13/Continuctions-for-Curmudgeons

Pourtant, je suis perdu avec un objet Binding. Quelqu'un peut-il me donner des exemples concrets de ce qui peut être fait intelligemment avec un objet Binding, mais pas très intelligemment avec des langages manquant le concept Ruby Binding?

Je pensais que certains objets reviendraient à leur état initial lorsque quelque chose se passerait mal au cours d'un long processus d'exécution, mais je ne suis pas sûr que cela puisse être implémenté avec Binding object et je pense qu'il pourrait être implémenté très intelligemment en clonant des objets avant la traitement et remplacement de l'objet modifié par leurs clones en cas de problème lors du traitement. Donc, ce n'est pas un exemple valable, je pense.

Merci d'avance pour votre aide.

Était-ce utile?

La solution

J'ai utilisé la classe de liaison pour implémenter un hack de débogage.

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

Vous pouvez l'utiliser pour inspecter une liste d'extraits de code Ruby avec ce que chaque extrait renvoie:

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

qui va imprimer

user = #<User id:1, username: 'joe', ...
current_resource = #<Comment id:20, ...
user.owns?(current_resource) = false

Je le trouve très utile pour un débogage rapide.

Je devais utiliser un objet de liaison pour capturer l'étendue où debug est appelé afin qu'il puisse être utilisé dans eval lorsque debug est courir. Il y a probablement d'autres moyens de mettre cela en œuvre, mais l'utilisation de la reliure a été simple et rapide. Il existe aussi probablement de bien meilleurs exemples de quels objets de liaison sont utiles pour ...

Autres conseils

Les objets de liaison sont utiles lorsque vous souhaitez évaluer les modèles ERB.

Découvrez http://www.seaside.st/ , une application Web pour les petites entreprises cadre. Il utilise beaucoup les continuations. Le meilleur exemple concret d'utilisation de ce dernier est ce système de gestion de contenu http://www.cmsbox.com/fr / cms

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top