ページ

2016年10月1日土曜日

sinatraで変数を展開できない時の対処法

状況


sinatraで変数を展開してURLに代入しようとしました。
実行してみると、変数が代入されるべきところには、変数の名前が入っていて、変数が展開されていませんでした。

redirect '/browse/"#{@isbn}"/"#{@id}"'

が、

/browse/#{@isbn}/#{@id}

となってしまいます。

原因


ダブルクォーテーション「 " 」ではなく、シングルクォーテーション「 ' 」で囲んでいたことが原因です。

ダブルクォーテーション「 " 」と、シングルクォーテーション「 ' 」の違いとは?

シングルクォートでは#{}という特殊文字の解釈が行われません。そのため、変数や定数の展開は行われません。文字をそのまま表示したい時に使えばよいのではないでしょうか。

ダブルクォーテーションでは、展開がされます。日本語文字もダブルクォーテーションで囲むため、基本はダブルクォーテーションを使うようにすれば良いのではないでしょうか。

ただ、この違いを知っておくと、必要なときに使い分けられるため、プログラム技術の向上につながります。このような違いも知っていくことが、優秀なプログラマーへと繋がるのではないでしょうか。

対処


変数の展開は、ダブルクォーテーション「 " 」ではなく、シングルクォーテーション「 ' 」で囲む


こちらのサイトが、この記事で書いていることの参考になると思います。
(この質問サイトもおすすめです)
【sinatra】変数を使ったパス指定ができない

0 件のコメント:

コメントを投稿