2012-01-20 11 views
0

私は「Ruby on Rails 3 Tutorial」をやり直し、より深いところで構文を理解しようとしています。ここでヘルパーアクションからいくつかのサンプルコードは、私が定義したものである。Ruby on Railsの構文

module ApplicationHelper 

    def title 
    base_title = "Mega Project" 
    if @title.nil? 
     base_title 
    else 
     "#{base_title} | #{@title}" 
    end 
    end 

end 

私の質問がされている行について:"#{base_title} | #{@title}"

まさにこの行の構成で何が起こっていますか?

より高いレベルで、このようなものを検索するための行き先はどこですか?

+0

コード編集ありがとう、Dave。私はこれについてどうやって行くのですか? – nbkincaid

答えて

3

#{}内で何がコードとして解釈ますSと、あなたが期待する結果があるので、結果は文字列に埋め込まれている:base_title >の

「<値| <タイトルインスタンス変数の値> "です。

+0

素晴らしい、ニック、これはまさに私が探していたものです。 – nbkincaid

1

は、変数を挿入するために、文字列内で使用されます。これは、補間と呼ばれます。

この特定のコードでは、タイトルが存在する場合、それはベースタイトルに追加されます。

title: "Super Thingo" 

何のタイトルが存在しない場合は、それだけでベースのタイトルに戻って落ちる

"Mega Project | Super Thingo" 

になります。

+0

ありがとう、minikomi。 – nbkincaid

3

これを探求するための最も有効な方法はirbである:

1.9.2p290 :001 > base_title = "things" 
=> "things" 
1.9.2p290 :002 > title = "stuff" 
=> "stuff" 
1.9.2p290 :003 > "#{base_title} | #{title}" 
=> "things | stuff" 

ここで実際に何が起こっているあなたは、文字列と、文字列を保持しているインスタンス変数@titleを保持するローカル変数base_titleを持っているということです。ハッシュなどの文字列は、文字列補間を使用してこれらの変数をフォーマットします。これは、インタープリタが評価するときに変数の値を文字列に差し込む特殊な文字列構文です。約good postです。

Rubyに関する本を入手することをおすすめします。二重引用符で囲まれた文字列内

+0

合意。 Irb(またはPry!)の新しいコンセプトを掘り起こすことは、すべてのルビのための貴重なツールです! – minikomi

+1

ありがとう、アイザック、これはとても役に立ちました。また、私はAmazonをチェックして、私の「Beginning Ruby」の本は出ていないと言います! – nbkincaid

1

これは単なる補間文字列です。 Rubyメソッドは最後に評価された式の値を明示的にreturnなしで返すので、titlenilの場合、elseブランチの文字列が返されます。

+0

ありがとう、マイケル。 – nbkincaid

1

この行は、二重引用符の結果としてbase_title@titleの値を持つ文字列を返しています。この例では、base_titleはローカル変数ですが、@titleはインスタンス変数です。コントローラ内のどのメソッドにも属している可能性があります。

詳細についてはこちらをご確認ください:
On String Interpolation
On Scope

+0

ありがとう、ポール。 – nbkincaid

2

#{}は、文字列内の変数補間です。それははるかに短いではないかもしれない。この場合、

base_title + " | " + @title 

を言って、より簡潔な方法として考えていますが、少しの部品の多くと長い文字列を持っている場合には、読みやすさが向上します。

"%s | %s" % [base_title, @title] 

もフォーマット(数字など)を可能にする:

ルビー1.9で導入された関連する特徴は、%を用いた補間です。 the docsを参照してください。