Ruby on Rails シングルクォーテーションとダブルクォーテーションの謎
Rubyにおいて文字列を表すのにシングルクォーテーション( ' )やダブルクォーテーション( " )を使って囲む。
シングルクォーテーション( ' )で囲むと囲ったものは全てが文字列と認識されて、そのまま出力される。
<出力結果>
私は#{food}が好きです。n/飲み物は#{drink}が好きです。
ダブルクォーテーション( " )で囲むと、特殊文字や式展開がある場合は行ってくれる。
<出力結果>
私は牛丼が好きです。
飲み物はコーラが好きです。
しかし、Ruby on Railsのテストコードにおいて謎が出てきた。
結合テストコードで下記のような記述があり、これは正解。
expect(page).to have_selector ".content_post[style='background-image: url(#{@tweet_image});']"
しかしなぜか式展開があるにもかかわらずシングルクォーテーションが使われている。
' background-image: url(#{@tweet_image}); '
ちなみにこの部分、シングルクォテーションをダブルクォーテーションに書き換えるとエラーが起きる。
細かいところばかりが気になってしまう悪い病気だ。
調べてもわからないから今日は諦めて明日また調べよう。
11/12 追加記載
すっかり今日までブログに追記するの忘れてた。
これは単純で
expect(page).to have_selector ".content_post[style="background-image: url(#{@tweet_image});"]"
もしこうしちゃうと
".content_post[style=" と "]"
ダブルクォーテーションで囲まれた部分が上記のように認識されてしまうから。
ちなみに
expect(page).to have_selector ".content_post[style='background-image: url(#{@tweet_image});']"
これは一度
".content_post[style='background-image: url(#{@tweet_image});']"
このようにダブルクォーテーションで囲まれてるから
'background-image: url(#{@tweet_image});'
この部分がシングルクォテーションで囲まれていようと#{@tweet_image}の式展開はできるという理屈みたい
以上