Pull to refresh

Comments 24

Прежде, чем ответить «что это жуткий говнокод, так делать не стоит, да и это, просто-напросто, — невозможно.» подумай, сделай, и потом уже объясни чем это плохо.
А то напоминает "Программист отвечает «невозможно» каждый раз, когда ему лень".
Может быть прочтете больше, чем первый абзац?
Я прочитал еще «Около полугода назад» и «Пару дней назад».
Что-там декоратор, так можно изобрести целое аспектное программирование, реализаций которого для PHP уже есть полдесятка.
Всё-таки полезно писать на хабру :)
> Скорее всего, мне даже никогда не придется воспользоваться таким инструментом, но…
Легковесный профайлинг приложения, особенно комплексного с кучей скрытых кейсов, как раз таки подходящая задача для описанного подхода.
Вариации на тему…
На шарпе с использованием «using»
using(SomeProfiler.Instance.LogCallFor("MyFunction(some, params, etc)"))
{
    // Execute some stuff
}


На Ruby
class Object
  alias :to_s_old :to_s
  def to_s
    begin
      # Here goes logging code (before call)
      self.to_s
      # Here goes logging code (after call and normal termination)
    rescue
      # Here goes logging code (after call and termination w/ exception)
    end
  end

Недавно в Ruby натыкался на некий аналог «using» в шарпе, но потерял ссылку (было неактуально). Если кто предложит свой вариант, буду благодарен.
Ошибка в блоке для Ruby. Должно быть так:
class Object
  alias :to_s_old :to_s
  def to_s
    begin
      # Here goes logging code (before call)
      self.to_s_old
      # Here goes logging code (after call and normal termination)
    rescue
      # Here goes logging code (after call and termination w/ exception)
    end
  end
Вторую строку не понял (не знаком с Руби), а вот остальные приму к сведению. Чуть позже сделаю как-то так:
addCallListener(f, {
  before: function(){},
  afterComplete: function(){}, // вызывается, если нет исключений
  after: function(){}, // вызываемся всегда
  error: function(){},
  
});
* after: function(){}, // вызывается всегда
> Вторую строку не понял (не знаком с Руби)
Вы про «alias»? Это создание еще одного псевдонима для функции. Нужно, чтоб оригинальный вариант функции была возможность вызвать. Новое определение функции «to_s» перекроет вызов оригинальной функции для всех, кроме нашего профайлера.
Понятно, спасибо.
Если интересно, вот ссылочка на обновленную версию функции: jsfiddle.net/finom/SGhzd/3/
Я конечно извиняюсь, но вы изобрели простейший декоратор/mock
>Скорее всего, мне даже никогда не придется воспользоваться таким инструментом, но…
И в YUI3 на этом построены плагины.
UFO just landed and posted this here
Чтоб быть ближе к народу :)
Странный тут народ в коментах… Не важно изобрел/не изобрел. Интересна имплементация в данном конкретном случае.

[].slice.call(arguments)

А почему не используете Array.prototype.slice.call(arguments)? В вашем случае зачем-то объект создается…
думаю, он просто сэкономил пару символов
Sign up to leave a comment.

Articles