Frage

Letzte Nacht, ich habe darüber nachgedacht, was ich denke, sind erweiterte Rubin Sprachfunktionen, nämlich Fortsetzungen (callcc) und Binding-Objekte. Ich meine fortgeschritten, weil ich eine statisch typisierte oo haben langages Hintergrund (C #, Java, C ++), I Rubin entdeckte vor kurzem, so dass diese Sprache Funktionen sind nicht sehr vertraut mir.

Ich frage mich, was die reale Welt Verwendung dieser langages Funktionen sein könnte. Nach meiner Erfahrung konnte, alles mit statisch typisierte oo langages getan werden, aber ich stimme manchmal nicht sehr intelligent. Ich glaube, ich herausgefunden, die Schönheit / Interesse der Fortsetzung zu lesen, dass schöner Artikel von Sam Ruby: http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons

Trotzdem bin ich mit Binding-Objekt verloren. Kann mir jemand Beispiele für etwas mit einigen realen Welt schaffen, das Objekt mit Bindung intelligent gemacht werden kann, aber nicht sehr elegant mit langages den Rubin Bindung Konzept fehlt?

Ich dachte an einige Objekte in ihren Ausgangszustand rollbacking, wenn etwas während eines langen runing Prozesses schief geht, aber ich bin nicht sicher, ob dies mit Binding-Objekt implementiert werden könnte und ich denke, ziemlich intelligent umgesetzt werden könnte, indem Sie Objekte vor dem Klonen Verarbeitung und ersetzen modifizierte Objekt mit ihrem Klonen, wenn etwas bei der Verarbeitung schief geht. Das ist also kein gültiges Beispiel denke ich.

Vielen Dank im Voraus für Ihre Hilfe.

War es hilfreich?

Lösung

Ich habe die Binding-Klasse verwendet, um einen Debug-Hack zu implementieren.

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

Sie können diese verwenden, um eine Liste der Schnipsel von Ruby-Code zu untersuchen zusammen mit dem, was jeder kehrt Snippet:

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

, welche druckt

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

Ich finde es sehr nützlich für eine schnelle Fehlersuche.

Ich brauchte ein Bindungsobjekt zu verwenden, um den Umfang zu erfassen, wo debug genannt wird, so kann es in der eval verwendet werden, wenn debug ausgeführt wird. Es gibt wahrscheinlich andere Möglichkeiten, aber mit der Bindung war einfach und schnell umgesetzt, dies zu haben. Darüber hinaus gibt es wahrscheinlich viel besser Beispiele dafür, was Bindung Objekte sind nützlich für die ...

Andere Tipps

Binding-Objekte sind nützlich, wenn Sie ERB Vorlagen auswerten möchten.

Hier finden Sie aktuelle http://www.seaside.st/ , es ist eine Web-Anwendung smalltalk Rahmen. Es nutzt Fortsetzungen ausgiebig. Bestes Beispiel aus der Praxis, wie man es verwenden, ist dies CMS http://www.cmsbox.com/en / cms

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top