这是我的情况:
XMLRPC::Client
有一个代理构造函数,new3
,它接受选项的散列。它取出各个值,然后将构造委托(delegate)给默认初始化程序,initialize
- 我从
XMLRPC::Client
派生。我想要一个是XMLRPC::Client
但具有一些附加功能的类。 - 我还希望能够使用选项散列实例化此派生 类。这意味着在派生类的初始化程序中,我必须使用
new3
代理构造函数以某种方式实例化super
。
我的问题是这是否可能。如果没有,那么解决这个问题的唯一方法是实际上将 XMLRPC::Client.new3
方法中的代码“复制并粘贴”到我的派生类的构造函数中吗?
我问这个的原因只是想看看是否有解决这个问题的方法,因为在 Ruby 社区中有 DRY(不要重复自己)这个反复出现的主题.但当然,如果这是唯一的方法,它不会杀死我。
最佳答案
我只是发布一个答案,通过向您展示 XMLRPC 的代码是如何编写的来补充其他答案
def new3(hash={})
# convert all keys into lowercase strings
h = {}
hash.each { |k,v| h[k.to_s.downcase] = v }
self.new(h['host'], h['path'], h['port'], h['proxy_host'], h['proxy_port'], h['user'], h['password'],
h['use_ssl'], h['timeout'])
end
http://www.ensta.fr/~diam/ruby/online/ruby-doc-stdlib/libdoc/xmlrpc/rdoc/classes/XMLRPC/Client.html
关于Ruby 自定义 super 初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4251160/