我正在创建一个类来包装 Savon SOAP 连接,如下所示:
class SOAPConnection
attr_reader :url, :namespace
def initialize(url, namespace)
@url = url
@namespace = namespace
@client = Savon::Client.new do
wsdl.endpoint = @url
wsdl.namespace = @namespace
end
end
end
此代码不起作用。被初始化的 wsdl 文档有一个 nil 端点和一个 nil 命名空间。
为了使代码工作,我必须使用以下内容:
class SOAPConnection
attr_reader :url, :namespace
def initialize(url, namespace)
@url = url
@namespace = namespace
@client = Savon::Client.new do
wsdl.endpoint = url # <=== use local variable
wsdl.namespace = namespace # <=== use local variable
end
end
end
请注意,在设置 wsdl.endpoint 和 wsdl.namespace 时,我使用的是本地 url 和命名空间变量,而不是 @url 和 @namespace 实例变量。
所以似乎在传入块初始化wsdl文档时,局部变量的上下文被保留,而实例变量的上下文则没有。这是 Ruby 的基本行为吗?