对Rack的源代码中的变量类型感到困惑

mko*_*mko 1 ruby rack scope

我的问题与以下3个代码摘录有关:

类方法代码: start(options = nil)

# File 'lib/rack/server.rb', line 136

def self.start(options = nil)
  new(options).start
end
Run Code Online (Sandbox Code Playgroud)

实例方法的代码: #initialize(options = nil)

# File 'lib/rack/server.rb', line 174
def initialize(options = nil)
  @options = options
  @app = options[:app] if options && options[:app]
end
Run Code Online (Sandbox Code Playgroud)

实例方法的代码: #start

# File 'lib/rack/server.rb', line 229
def start
  if options[:warn]
    $-w = true
  end

  ...# more lines that are not related to my question
end
Run Code Online (Sandbox Code Playgroud)

我的问题是,options实例方法中的局部变量应该start@options吗?在我的选项中,由于前2个摘录显示选项作为参数传递给initialize,并使其成为实例变量@options,所以在实例方法启动时,它应该引用它@options,而不是options因为范围options不能可以通过#start访问

Ali*_*kau 5

在同一个类中有选项的getter方法:

# File 'lib/rack/server.rb', line 180
def options
  @options ||= parse_options(ARGV)
end
Run Code Online (Sandbox Code Playgroud)

optionsin #start是对此方法的调用,而不是局部变量.