По сути задачка для гиков:
Есть класс А, у него метод save, принимающий один параметр, у параметра есть значение по умолчанию (допустим, true). Экземпляр класса А, принимающий метод save без параметров, автоматически принимает true и работает в соответствии с этим флагом. Есть класс В, у которого есть поле типа А. При вызове метода save для этого поля изнутри контекста класса В без параметров управление должно передаваться другой реализации метода, которая принимает по умолчанию значение параметра false. Примерно как работает override, но не глобально, а внутри только одного класса.
Вот заготовка:
Есть класс А, у него метод save, принимающий один параметр, у параметра есть значение по умолчанию (допустим, true). Экземпляр класса А, принимающий метод save без параметров, автоматически принимает true и работает в соответствии с этим флагом. Есть класс В, у которого есть поле типа А. При вызове метода save для этого поля изнутри контекста класса В без параметров управление должно передаваться другой реализации метода, которая принимает по умолчанию значение параметра false. Примерно как работает override, но не глобально, а внутри только одного класса.
Вот заготовка:
Copy Source | Copy HTML
- class A
- def save(validate = true)
- validate ? "INVALID" : "VALID"
- end
- end
- class B
- # что-то очень смурное тут должно быть
- def initialize
- @a = A.new
- end
- def save
- @a.save
- end
- end
- A.new.save # => "INVALID"
- B.new.save # => "VALID"
- A.new.save # => "INVALID"