- get '/' do "hello" endは引数およびブロックを伴うRubyのメソッド呼び出しである
- それなら対応するメソッド定義があるはずだ=>base.rbの中のBaseクラスにクラスメソッドとしてある
- よってBaseクラスオブジェクトに対してBase.getとしてこのメソッドを呼べるが、Sinatraではトップレベルでこれを呼んでいる
- つまりトップレベルがBaseクラスのコンテキストにない限りそこでこれをよぶことはできない
- Sinatraはこの問題を解決するためにメソッドの委譲を使っている
#!/opt/local/bin/ruby
require "rubygems"
require "sinatra/base"
def get(*args, &b)
Sinatra::Base.send(:get, *args, &b)
end
get('/'){ "hello" }
at_exit do
::Sinatra::Base.run!
end
No comments:
Post a Comment