Смущен тип переменной в исходном коде Rack - PullRequest
1 голос
/ 21 января 2012

Мой вопрос связан со следующей 3 выдержками из кода:

код метода класса: start(options = nil)

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

def self.start(options = nil)
  new(options).start
end

код метода экземпляра: #initialize(options = nil)

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

код метода экземпляра: #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

Мой вопрос заключается в том, должна ли локальная переменная options в методе экземпляра start быть @options ?.В моем варианте, поскольку первые 2 выдержки показывают, что параметры в качестве параметра передаются в initialize и превращаются в переменную экземпляра @options, поэтому при запуске метода экземпляра он должен ссылаться на него как @options, вместоoptions, поскольку # start

не может получить доступ к области options

1 Ответ

5 голосов
/ 21 января 2012

В том же классе есть метод получения для опций:

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

options в #start - это вызов этого метода, а не локальной переменной.

...