Pull to refresh

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

Reading time1 min
Views700
По сути задачка для гиков:
Есть класс А, у него метод 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" 
Tags:
Hubs:
Total votes 10: ↑5 and ↓50
Comments7

Articles