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