0

我现在正在研究Campingweb 框架是如何工作的,我不明白Camping::Server.start第 10 行在/bin/camping做什么。

我希望这会在第 131 行调用该start方法/lib/camping/server.rb,因此我puts 'hello'在该方法的开头放置了一个简单的语句,希望在我运行时调用该语句/bin/camping。但是,我从来没有看到我的 puts 语句被调用,所以我只能假设它不是start被调用的方法。

我觉得我在这里遗漏了一些明显的东西。以下是露营 github 页面和相关代码部分的链接:

Github:https ://github.com/camping/camping

来自/bin/camping

#!/usr/bin/env ruby

$:.unshift File.dirname(__FILE__) + "/../lib"

require 'camping'
require 'camping/server'

begin
   Camping::Server.start
rescue OptionParser::ParseError => ex
   puts "did it error"
   STDERR.puts "!! #{ex.message}"
   puts "** use `#{File.basename($0)} --help` for more details..."
   exit 1
end

来自/lib/server.rb

def start
 if options[:server] == "console"
    puts "** Starting console"
    @reloader.reload!
    r = @reloader
    eval("self", TOPLEVEL_BINDING).meta_def(:reload!) { r.reload!; nil }
    ARGV.clear
    IRB.start
    exit
 else
    name = server.name[/\w+$/]
    puts "** Starting #{name} on #{options[:Host]}:#{options[:Port]}"
    super
 end
end
4

1 回答 1

0

puts 'hello'的 onCamping::Server.start没有被调用,因为我不明白静态方法是如何在 ruby​​ 中定义的。

start被静态调用,现在我意识到start我在代码段中查看的方法不是静态方法,这意味着start正在调用另一个方法。我查看Camping::Server并意识到它继承自Rack::Server,它具有以下方法:

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

那是被调用的方法,而不是 on 的方法/lib/camping/server.rb。我一直在寻找错误的方法。

于 2013-08-01T01:53:53.060 回答