【发布时间】:2015-08-03 21:34:06
【问题描述】:
我有 ruby 类,我试图在其中实现克隆方法。我希望能够使用所有类都可以继承的通用克隆方法。类的属性可以是数组类型、散列或其他对象。
我可以让这个更通用,以便深度克隆吗?可能在超类 QueryModel 中定义一个克隆方法?这将如何运作?
class Bool < QueryModel
attr_accessor :name, :should, :must, :must_not
def clone
Bool.new(self.name, self.should.clone, self.must.clone, self.must_not.clone)
end
def serialize
result_hash = {}
query_hash = {}
if( instance_variable_defined?(:@should) )
query_hash[:should] = @should.serialize
end
if( instance_variable_defined?(:@must) )
query_hash[:must] = @must.serialize
end
if( instance_variable_defined?(:@must_not) )
query_hash[:must_not] = @must_not.serialize
end
if( instance_variable_defined?(:@should) || instance_variable_defined?(:@must) || instance_variable_defined?(:@must_not) )
return result_hash = query_hash
end
end
end
这里是可能使用克隆的地方:
class Query < QueryModel
attr_accessor :query_string, :query, :bool
def serialize
result_hash = {}
query_hash = {}
if( instance_variable_defined?(:@query_string) )
query_hash[:query_string] = @query_string.serialize
#result_hash[:query] = query_hash
end
if( instance_variable_defined?(:@query) )
query_hash[:query] = @query
end
if( !instance_variable_defined?(@bool) )
if( instance_variable_defined?(:@query) || instance_variable_defined?(:@query_string) )
result_hash[:query] = query_hash
return result_hash
end
else
bool = @bool.clone
result_hash[:query] = bool
end
end
end
【问题讨论】:
-
Object#dup 怎么样?
-
怎么是重复的?你能解释一下如何使用超类来做到这一点
标签: ruby-on-rails ruby ruby-on-rails-4 ruby-on-rails-3.2