我需要创建一个类来防止外部代码直接实例化它。所有实例都是通过调用几个类方法获得的,还有一些实例方法可以生成新实例并返回它们。
class SomeClass
class << self
private :new, :allocate
end
def initialize(hash)
@hash = hash
end
# A class method that returns a new instance
def self.empty
new({}) # works fine!
end
# Another class method that returns a new instance
def self.double(a, b)
new({a => b}) # works fine!
end
# An instance method that will generate new instances
def combine_with(a, b)
# Here's the problem!
# Note: it doesn't work with self.class.new either
SomeClass.new(@hash.merge({a => b}))
end
end
所以我将new
方法定义为私有。这适用于类方法,在它们内部我仍然可以在内部调用new。但我不能在实例方法中调用new
。我尝试将new
定义为受保护,但这也无济于事。
答案 0 :(得分:1)
您是否尝试使用send
?
SomeClass.send :new, @hash.merge({a => b})