向标准ruby对象添加自定义方法

时间:2017-11-14 12:27:37

标签: ruby

如何向标准ruby对象添加自定义方法,例如字符串和整数?

我已经在例如rails中看到过这个,以及用于将rubma字符串转换为平假名的ruby的mojinizer库,如

"tsukue".hiragana #=> "つくえ"

3 个答案:

答案 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类中添加新方法了。