我是Ruby的新手,想了解类实例变量在多个并行请求中的行为。
我在控制器类内有一个方法,每次为特定操作的请求称为每次都称为(在这种情况下创建(
class DeployProvision
def self.create(data)
raise "Input JSON not received." unless data
# $logger.info input_data.inspect
failure = false
response_result = ""
response_status = "200"
@validator = SchemaValidate.new
validation = @validator.validate_create_workflow(data.to_json)
end
end
此方法称为(deployprovision.create(data((
我对@Validator类实例变量在多个请求时的行为有些困惑。它在多个请求中共享吗?将其声明为类实例变量而不是本地变量是一个好主意?
我正在研究现有代码库,并想了解将@Validator作为类实例变量而不是本地变量创建的意图。
您可以像这样编写超简单脚本:
require 'sinatra'
class Foo
def self.bar
@test = Time.now
puts @test
end
end
get '/' do
Foo.bar
end
,您会看到它无能为力,因为在每个呼叫中,您都在创建新的时间实例(代码中的schemavalidate(。
如果您使用了回忆,并且有类似@validator ||= SchemaValidate.new
之类的东西,则在请求之间会有一个存储的schemavalidate实例。
我认为这不会改变性能,我不知道为什么有人会这样做。
您可以使用Sinatra的超简单脚本来测试它的行为。
祝您好运!