Реальное использование связующих объектов в ruby

StackOverflow https://stackoverflow.com/questions/1605774

  •  05-07-2019
  •  | 
  •  

Вопрос

Прошлой ночью я думал о том, что я думаю о продвинутых функциях языка ruby, а именно: Continuations (callcc) и объекты Binding. Я имею в виду продвинутый, потому что у меня есть статический тип языка oo langages (C #, Java, C ++), я недавно открыл для себя ruby, поэтому эти возможности языка мне не очень знакомы.

Мне интересно, что может быть в действительности использование этих функций языка. По моему опыту, все может быть сделано с помощью статически типизированных языков, но иногда я согласен не очень умно. Я думаю, что я понял красоту / интерес продолжения, читая эту прекрасную статью от Сэма Руби: http://www.intertwingly.net/blog/2005/04/13/Continuations-for-Curmudgeons

Тем не менее, я потерял объект Binding. Может ли кто-нибудь предоставить мне некоторые реальные примеры того, что можно сделать с помощью объекта Binding, но не очень умно, если в языке отсутствует концепция рубинового Binding?

Я думал о том, чтобы откатить некоторые объекты до их начального состояния, когда что-то пойдет не так во время длительного процесса, но я не уверен, что это может быть реализовано с помощью объекта 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

Я считаю, что это очень полезно для быстрой отладки.

Мне нужно было использовать объект привязки для захвата области, где вызывается debug , чтобы его можно было использовать в eval , когда debug запустить. Возможно, есть и другие способы реализовать это, но использование привязки было простым и быстрым. Есть также, вероятно, гораздо лучшие примеры того, какие объекты привязки полезны для ...

Другие советы

Связующие объекты полезны, когда вы хотите оценить шаблоны ERB.

Посмотрите на http://www.seaside.st/ это веб-приложение для небольших разговоров фреймворк. Он широко использует продолжения. Лучший пример из реальной жизни о том, как его использовать, это http://www.cmsbox.com/en. / CMS

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top