From: "byroot (Jean Boussier)" Date: 2022-03-10T12:25:18+00:00 Subject: [ruby-core:107821] [Ruby master Feature#18618] no clobber def Issue #18618 has been updated by byroot (Jean Boussier). Note that you could perfectly implement this in pure Ruby today. ```ruby module ClobberChecker def method_added(name) super no_clobber(name, caller(1, 1).first) if @no_clobber end end class Class def no_clobber(method_name = nil, callsite = caller(1, 1).first) if method_name if (super_method = instance_method(method_name).super_method) warn "Clobbering #{super_method.owner}##{super_method.name} (#{callsite})" end else extend(ClobberChecker) @no_clobber = true end end end class A def foo end def bar end end class B < A no_clobber def foo end no_clobber def bar end end ``` There might be some subtleties though, if for instance you include a module after defining a method. ---------------------------------------- Feature #18618: no clobber def https://bugs.ruby-lang.org/issues/18618#change-96750 * Author: ed_ (Ed Mangimelli) * Status: Open * Priority: Normal ---------------------------------------- Sometimes I want to be certain I'm not clobbering/masking a method: ``` class Dog def bark 'bark!' end end class Poodle < Dog raise if method_defined? :bark def bark 'bow-wow' end end ``` I propose creating a shorthand. Maybe something like: ``` class Dog def bark 'bark!' end end class Poodle < Dog ncdef bark # "no clobber" def 'bow-wow' end end => # ``` This would be useful in scenarios where subclassing a class (or including a mixin) ***you don't own*** is common practice --for instance, subclassing `ApplicationRecord` for your model in Rails. I agree that `ncdef` is pretty ugly. Maybe `def!` -- https://bugs.ruby-lang.org/ Unsubscribe: