Ruby 有没有办法避免定义具有特定名称的方法?
是否有办法避免(尝试时引发错误)使用特定名称定义方法,例如Ruby 有没有办法避免定义具有特定名称的方法?,ruby,methods,Ruby,Methods,是否有办法避免(尝试时引发错误)使用特定名称定义方法,例如Foo#bar?(一个用例是已经定义了Foo#bar,我想避免覆盖该方法,但这与问题无关。)我假设如下: class Foo prohibit_definition :bar end ... # Later in some code class Foo def bar ... end end # => Error: `Foo#bar' cannot be defined 也许您可以在模块类的方法添加()中捕
Foo#bar
?(一个用例是已经定义了Foo#bar
,我想避免覆盖该方法,但这与问题无关。)我假设如下:
class Foo
prohibit_definition :bar
end
...
# Later in some code
class Foo
def bar
...
end
end
# => Error: `Foo#bar' cannot be defined
也许您可以在
模块
类的方法添加(
)中捕获回调,并检查方法名称,如果添加的方法不符合您的条件,则删除它。然后您可以提出一个错误
我想不是你想要的而是足够近的距离
class Class
def method_added(method_name)
if method_name == :bar
remove_method :bar
puts "#{method_name} cannot be added to #{self}"
end
end
我会把钱押在“做不到”上。@millimoose我会下这个赌注。@ShawnBalestracci你将不得不用10个代表点来代替钱。你会犯一个错误,但实际上添加了这个方法。还是我弄错了?@emrenevayeshirazi我在IRB的1.8.7中给Foo.new.bad打了电话,所以在某些情况下它确实被添加了。这取决于你想变得多严厉,如果你真的想造成惩罚,你可以取消惩罚方法。谢谢。我想你明白了。肖恩·巴莱斯特拉奇(Shawn Balestracci)就实现了这一点。
class Class
def method_added(method_name)
raise "So sad, you can't add" if method_name == :bad
end
end
class Foo
def bad
puts "Oh yeah!"
end
end
#irb> RuntimeError: So sad, you can't add
# from (irb):3:in `method_added'
# from (irb):7