2010-12-03 52 views
1

你可以在一個here-doc中放置一個條件語句嗎?你可以在一個here-doc裏放一個條件語句嗎?

IE:

sky = 1 
str = <<EOF 
The sky is #{if sky == 1 then blue else green end} 
EOF 

感謝

+1

你可以這樣做,但是看看超越技術能力去做它,並決定它是否有利於代碼可維護性是很好的。我寧願看到條件測試發生在here-doc之外,分配給一個變量,然後將這個變量嵌入到here-doc分配中。這個例子看起來像是一個細微的差別,但是有助於隨着程序的增長保持代碼更好的組織,有點像分離邏輯與Rails或其他MVC中的顯示。 – 2010-12-03 07:00:18

回答

4

是的,可以。 (你試過了嗎?)HEREDOCs宣稱你的行爲像雙引號字符串。如果你碰巧要反向,你會單引號您HEREDOC指標,像這樣:

str = <<EOF 
    #{ "this is interpolated Ruby code" } 
EOF 

str = <<'EOF' 
    #{ This is literal text } 
EOF 

「綠色」,並在你的榜樣「藍色」是錯誤的,除非你有這些名稱的方法或局部變量。你可能想要麼:

str = <<EOF 
    The sky is #{if sky==1 then 'blue' else 'green' end} 
EOF 

...或者更簡潔的版本:

str = <<EOF 
    The sky is #{sky==1 ? :blue : :green} 
end 

與所有串插,每個表達式的結果,呼籲它#to_s。由於符號的字符串表示是相同的文本,因此在插入時使用符號可以在鍵入時保存一個字符。我經常使用它:

cats = 13 
str = "I have #{cats} cat#{:s if cats!=1}" 
+0

真棒,完美的作品!需要類似於「我有#{貓}貓#{:如果貓!= 1}」。謝謝! – Matt 2010-12-03 05:47:28

相關問題