为什么在 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"
AFAIK,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
当我们猴子修补 Ruby 中的 Array/String class 时,不创建调用方法的对象背后的逻辑是什么?
例如
class String
def custom_reverse
self.reverse.concat("anystring")
end
end
"MohantySan".custom_reverse
=> "naSytnahoManystring"
AFAIK,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