我的问题与以下 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/