Как стать автором
Обновить

Изменение поведения метода в зависимости от контекста

Время на прочтение1 мин
Количество просмотров698
По сути задачка для гиков:
Есть класс А, у него метод save, принимающий один параметр, у параметра есть значение по умолчанию (допустим, true). Экземпляр класса А, принимающий метод save без параметров, автоматически принимает true и работает в соответствии с этим флагом. Есть класс В, у которого есть поле типа А. При вызове метода save для этого поля изнутри контекста класса В без параметров управление должно передаваться другой реализации метода, которая принимает по умолчанию значение параметра false. Примерно как работает override, но не глобально, а внутри только одного класса.


Вот заготовка:
Copy Source | Copy HTML
  1. class A
  2.   def save(validate = true)
  3.     validate ? "INVALID" : "VALID"
  4.   end
  5. end
  6. class B
  7.   # что-то очень смурное тут должно быть 
  8.   def initialize
  9.     @a = A.new
  10.   end
  11.   def save
  12.     @a.save
  13.   end
  14. end
  15. A.new.save # => "INVALID" 
  16. B.new.save # => "VALID" 
  17. A.new.save # => "INVALID" 
Теги:
Хабы:
0
Комментарии7

Публикации

Изменить настройки темы

Истории

Работа

Ruby on Rails
10 вакансий
Программист Ruby
8 вакансий

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн