2009-11-28 11 views
7

これはRubyの質問かSinatraの質問か分かりませんが、私は両方に新しいので、次のコードは機能しません。なぜなら、最初のmy_variableはブロックのローカルなので、理由を理解しています。私はちょうどそれを正しくするための構文を知らない。私はただ一度実行したいコードをSinatra(ruby web framework)に入れますか?

require 'rubygems' 
require 'sinatra' 

configure do 
    my_variable = "world" 
end 

get '/' do 
    "Hello " + my_variable 
end 

EDIT1 - 次に、私はconfigureブロックの適切な目的について混乱していると思います。

require 'rubygems' 
require 'sinatra' 

my_variable = "world" 

get '/' do 
    "Hello " + my_variable 
end 

答えて

7
require 'rubygems' 
require 'sinatra' 

set :my_variable, "world" 

get '/' do 
    "Hello " + settings.my_variable 
end 
+1

私は、Sinatra設定ブロックとブロック外の処理を混同していると思います。 –

+2

オプションはアプリケーションレベルの設定ですが、設定では現在の環境に応じて動作をカスタマイズできます。 –

+0

configureは、一度実行される単なるコードブロックです。 –

0

もう一つの方法は、次のとおりです。

require 'rubygems' 
require 'sinatra' 

@my_variable="world" 

get '/' do 
    "Hello " + @my_variable 
end 
+0

インスタンス変数を使用することはお勧めできません。なぜなら、インスタンス変数がどのオブジェクトに影響するのかが明確でないからです。 –

0

私はクラス変数を設定します - 例えば。 @@my_variable - configureブロック内にあります。 configureブロックは、起動時に実行したいコード用に存在するので、変数を設定することは理にかなっています。あなたのSinatraアプリケーションはSinatra::Baseのサブクラスなので、この状況でクラス変数を使用するのが適切です。

3

設定ブロックは、アプリの設定に関連しています。それが何であれ、適切にカプセル化する必要があります:

require 'sinatra' 

configure do 
    set :my_option, "world" 
end 

get '/' do 
    "Hello #{options.my_option}" 
end 
+4

良いですが、もう 'オプション 'ではなく、' settings'です。 – pje