如何向标准ruby对象添加自定义方法,例如字符串和整数?
我已经在例如rails中看到过这个,以及用于将rubma字符串转换为平假名的ruby的mojinizer库,如
"tsukue".hiragana #=> "つくえ"
答案 0 :(得分:3)
只需打开课程并添加方法即可。您可以根据需要多次打开课程。
class Fixnum
def lucky?
self == 7
end
end
95.lucky?
=> false
7.lucky?
=> true
这是一项有用的能力,我们都做到了。请注意您的代码是可维护的,并且您不会破坏基本功能。
答案 1 :(得分:2)
如果您确实觉得有必要扩展您不拥有的类的默认行为(这基本上是一个非常糟糕的主意,应该使用其他方法来实现此功能),您应该不 re - 打开类,但是this具有所请求功能的模块:
String.prepend(Module.new do
def uppercase!
self.replace upcase
end
end)
str = "hello"
str.uppercase!
#⇒ "HELLO"
str
#⇒ "HELLO"
如果要在类中存在要覆盖的方法,则仍可以通过从模块方法内部调用super
来访问它。
答案 2 :(得分:1)
class String
def add_exclamation_mark
self + "!"
end
end
> "hello".add_exclamation_mark
"hello!"
这样你就可以在String类中添加新方法了。