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

时间:2012-01-21 08:48:29

标签: ruby scope rack

我的问题与以下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吗?在我的选项中,因为前两个摘录显示选项作为参数传递给initialize,并使其成为实例变量@options,所以在实例方法启动时,它应该将其引用为{ {1}},而不是@options,因为#start无法访问options的范围

1 个答案:

答案 0 :(得分:5)

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

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

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