【发布时间】:2012-12-20 13:23:40
【问题描述】:
我需要一个类似于 Hash 的类,但不一定具有所有 Hash 方法。我已经读过,对像 Hash 这样的核心类进行子类化并不是一个好主意。不管这是否属实,做这种事情的最佳做法是什么?
# (a) subclass Hash, add new methods and instance variables
class Book < Hash
def reindex
@index = .....
end
end
# (b) create a new class from scratch, containing a hash,
# and define needed methods for the contained hash
class Book
def initialize(hash)
@data = hash
end
def []=(k,v)
@data[k] = v
end
# etc....
def reindex
@index = ....
end
# (c) like (b) but using method_missing
# (d) like (b) but using delegation
我意识到 Ruby 有不止一种方法来完成给定任务,但是对于上述哪种方法在相对简单的情况下更可取,有什么通用规则吗?
【问题讨论】:
-
当你只需要一些方法时,我倾向于组合,用委托。
-
为什么不能使用
Hash?出了什么问题?当您想要添加或更改方法时使用子类化,而不是当您想要删除它们时。 -
@sawa,也许我不清楚。我确实想添加或更改方法。我的示例添加了“重新索引”方法。
标签: ruby hash subclassing duck-typing