[ruby-core:108290] [Ruby master Feature#18618] no clobber def
From:
"sawa (Tsuyoshi Sawada)" <noreply@...>
Date:
2022-04-19 08:44:53 UTC
List:
ruby-core #108290
Issue #18618 has been updated by sawa (Tsuyoshi Sawada).
The fact that you want to raise an error suggests that you want this feature to take place during development, and not during production: You want to be notified when writing code so that you do not accidentally overwrite a method. If a new method overwrites an old one, then you want to remove the new definition entirely from the code, and if it does not, then you just want to end up with an ordinary `def` block in the final production code.
If that is the case, I think such feature would be the responsibility of an IDE, and not of the Ruby implementation.
Or, if that is not the case, and you want to keep the definition in the code base regardless of whether it overwrites or not, but not let the overwriting take effect, then in such case, I think you need some different mechanism.
----------------------------------------
Feature #18618: no clobber def
https://bugs.ruby-lang.org/issues/18618#change-97311
* 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
=> #<MethodAlreadyDefined: Method `bark' already defined.>
```
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: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>