是否可以在 Ruby 中冻结(使其不可变)类或方法?

col*_*rco 2 ruby monkeypatching metaprogramming

在红宝石中:

module Example
  class ExampleValidator
    def mymethod
      # do something important
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

是否可以使其mymethod不可变(即没有猴子修补)?

不然“冻结”全班也可以接受ExampleValidator

Sch*_*ern 5

是的,您可以调用freeze模块。

Example::ExampleVaildator.freeze
Run Code Online (Sandbox Code Playgroud)

但是,我会质疑为什么这是必要的。也许这是用技术问题来解决社会问题。Rubocop等工具应该对猴子补丁发出警告。