0

現在、Web フレームワークがどのように機能するかを調べていますが、10 行目Campingの行が何をしているのかわかりません。Camping::Server.start/bin/camping

これで 131 行目のstartメソッドが呼び出されると予想していたので、そのメソッドの先頭に単純なステートメントを配置し、実行時にそのステートメントが呼び出されることを期待しました。ただし、 puts ステートメントが呼び出されるのを見たことがないので、そのメソッドが呼び出されるのではないとしか思えません。/lib/camping/server.rbputs 'hello'/bin/campingstart

ここで明らかな何かが欠けているように感じます。キャンプ 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

Ruby で静的メソッドがどのように定義されているか理解できなかったので、私のputs 'hello'onが呼び出されませんでした。Camping::Server.start

startstartが静的に呼び出されていましたが、スニペットで見ていたメソッドが静的メソッドではないことに気付きました。つまり、別のstartメソッドが呼び出されていたということです。調べてみると、次のメソッドを持つCamping::Serverから継承されていることがわかりました。Rack::Server

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

それは呼び出されるメソッドであり、上のメソッドではありません/lib/camping/server.rb。私は間違った方法を見ていました。

于 2013-08-01T01:53:53.060 に答える