我正在使用ruby(1.8.7)和soap4r(1.5.8)来使用Web服务。 Web服务有一个名为“type”的方法,我无法获得该值。
@driver=SOAP::WSDLDriverFactory.new(WSDL_URL).create_rpc_driver
result = @driver.GetJob(:jobid => "123")
puts "jobname is #{result.name}"
puts "jobtype is #{result.type}"
第四行给出了“警告:不推荐使用Object#type;使用Object#class”。我知道不推荐使用Object.type。我想调用从Web服务获得的结果的“类型”方法。我不拥有网络服务,所以我无法改变它。
任何帮助表示赞赏。提前谢谢。
答案 0 :(得分:4)
可能使用method_missing调用type方法,当Object上存在方法时,此机制不起作用。如果是这样,这个小小的猴子补丁摆脱了Object.type:
class Object
undef_method :type
end
在调用Web服务之前将此代码放在某处,它应该可以正常工作。
另一种解决方法是升级到ruby 1.9。类型方法消失了!
答案 1 :(得分:1)
我会寻找一种方法,允许您传入代表您想要的属性的符号。它就像
puts "jobtype is #{result.some_method(:type)}"
或(不太可能)
puts "jobtype is #{result.some_method("type")}"
@ froderik的答案可能会帮助您解决某个特定情况,但如果您想要的属性被称为“class”,“send”或“initialize”,该怎么办?肥皂库必须以某种方式处理这种情况,除非它的设计很糟糕。
答案 2 :(得分:1)
猜猜,result['type']
怎么样?或result[:type]
?