в рубиновой классе я перезаписать три метода, и, в каждом методе, я в основном делаю то же самое:Переписать подобные методы, короче синтаксис
class ExampleClass
def confirmation_required?
is_allowed && super
end
def postpone_email_change?
is_allowed && super
end
def reconfirmation_required?
is_allowed && super
end
end
Есть ли более компактный синтаксис? Как я могу сократить код?
Если ваш код работает и вы хотите просмотреть код, перейдите к [codereview.se]. –
Мне было бы интересно увидеть решение, которое использовало технику, аналогичную всем методам рельсов. Что-то вроде «require_confirmation: postpone_email_change?: Reconfirmation_required?: Confirm_required?» –
@JeffPrice рельсы смешны, но все же, пожалуйста: 'Extender = Module.new {def require_confirmation (* methods); methods.each {| m | define_method m {| * args, & cb | is_allowed && super (* args, & cb)}}; конец ; module_function: require_confirmation} '. Теперь вызовите 'Extender.require_confirmation: postpone_email_change ?,: reconfirmation_required ?,: confirm_required?' Или 'prepend'' ExampleClass.singleton_class' с 'Extender' и вызывать его без явного пространства имен. – mudasobwa