这不是特定于Ruby的,但我现在碰巧使用Ruby 这是一个提供文本打印功能的类。
class Printer
# some static methods
def self.fancy_print(text)
# do fancy formatting
end
def self.print(text)
fancy_print(text)
end
# some instance methods
def initialize(text)
@text = text
end
def print
#somehow call fancy_print(@text)
end
end
在类中提供实例和静态方法是不好的设计?
有时候我想保留几个Printer
的实例。其他时候,我只需要说Printer.print(text)
并且只需抓取该文本而无需将其存储以供日后使用,从而导致静态print
方法和实例print
方法。
答案 0 :(得分:4)
不,设计不错。
这是完全正常的 - 有些方法是类方法,有些是实例方法。我不确定这个问题甚至可能是什么。甚至在 中找到其中一个类有点困难,尽管在Java中你经常会看到静态实用程序类。
编辑 IMO这个问题具有误导性;你实际上是在询问使用同名的静态和实例方法是不好的设计。
如果两者都是公开的,那就太棘手了,因为如何使用这个类并不一定是显而易见的。换句话说,它是否设计为通过静态或实例方法使用?都?他们有什么不同?这种差异应该......用名称区分吗?
最终取决于背景和用法 - 没有单一答案。
答案 1 :(得分:4)
我认为没关系。以下是编码Printer#print方法的方法
class Printer
def print
self.class.fancy_print(@text)
end
end
答案 2 :(得分:0)
为特定类提供类方法和实例方法没有任何问题,只要它们有意义属于类。
即。 fancy_print做什么?它是Printer类特有的。如果是,那么你不必担心。
另一方面,如果它要用于任何字符串值,你可以做一些比较聪明的事情,即将这个方法添加到字符串类
String.class_eval do
def fancy_print
## implementation
end
end
现在你可以"Hello".fancy_print
希望这个答案有用。也写测试用例!