为什么在 Ruby 中猴子修补 Array 或 String class 时不需要创建对象?

Why object creation is not needed when we monkey patch Array or String class in Ruby?

当我们猴子修补 Ruby 中的 Array/String class 时,不创建调用方法的对象背后的逻辑是什么?

例如

class String
  def custom_reverse
    self.reverse.concat("anystring")
  end
end

"MohantySan".custom_reverse
 => "naSytnahoManystring"

A​​FAIK,custom_reverse 是 String class 的实例方法,如果我错了请纠正我。

它与 monkeypatching 无关,但与字符串文字有关。当你这样做时

"MohantySan".custom_reverse

就像

String.new("MohantySan").custom_reverse

但是字符串的使用非常普遍,因此它们可以方便地实例化对象。

Ruby classes 是开放的,因此您可以将方法添加到任何 class。甚至更多 ruby class 是对象,可以创建另一个对象。当您定义这样的方法时,它可以在所有 class 个实例

中访问
class Foo
  def foo(name)
    puts "foo #{name}"
  end
end