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

标签 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

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

最佳答案

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

# File 'lib/rack/server.rb', line 180
def options
  @options ||= parse_options(ARGV)
end
#start 中的options 是对该方法的调用,而不是局部变量。

关于ruby - 对Rack源码中的变量类型感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8951741/

相关文章:

javascript - 告诉 TypeScript 文件将包含在脚本标签中?

ruby - 如何将数据从我的 sinatra 应用程序中的类传递到 websocket-rack?

c# - .NET 控件和范围

ruby - 结合 Rack::Builder 和 Rack::Cascade

ruby - 使用 Sinatra 更改 HTTP 状态消息

ruby - 没有这样的文件或目录 -- test.rb (LoadError)

ruby - 使用 RubyXL 加载 Axlsx 创建的文件时读取工作表名称

ruby - Vagrantfile ruby​​ 语法解释

ruby-on-rails - Google oauth via devise 和 omniauth/oauth 不断请求访问

java - 在应用程序范围内设置一个变量,以便在 session 之间共享