Cherry本勉強中 8月25日
文字列について
文字列はシングルクオート('')、ダブルクオート("")だけではなく、%記法でも作ることが可能
cherry本でこれを読んで、最初はシングル・ダブルクオートだけで良いのでは?と考えたけども、文字列内にシングル・ダブルクオートを表示したい場合などに有効だなと考え直しました。
%q! !/ %Q! ! /%! !
%q! ! => シングルクオートと同じ
puts %q!私は'これは何?'と言った!
%Q! ! => ダブルクオートと同じ %! ! => ダブルクオートと同じ
data = "りんご" puts %Q!この果物は#{data}ですか?! puts %!この#{data}はここで育ったものですか?!
ここで使用した! !ですがこれは? ?や^ ^でもOKです。また( )、[ ]、{ }なども使えます
ヒアドキュメント
puts "line1, line2"
line1, line2
しかし、このような形は長文には適さないので、もっとスッキリする形を使う
<<識別子 1行目 2行目 3行目 識別子
<利用例>
a = <<text これは利用例です。 こういう形式は 複数行に渡る長い文字列を作成する時に便利です。 text puts a
これは利用例です。 こういう形式は 複数行に渡る長い文字列を作成する時に便利です。
- <<-を使うと最後の識別子をインデントさせることができる
def test <<-text これは利用例です。 <<-を使用すると最後の識別子をインデントできます。 text end puts test
これは利用例です。 <<-を使用すると最後の識別子(text)をインデントできます。
ちなみにこうするとエラーになります (<<-を使用していないからインデントが通用していない為です)
def test <<text これは利用例です。 使用しないとエラーになります text end puts test
<<~を使うと内部文字のインデントが無視されます
def test_2 <<~text これは利用例です。 <<~を使用するとインデントを無視します text end puts test_2
これは利用例です。 <<~を使用するとインデントを無視します
ちなみにこれを<<-にするとどうなるか
def test_2 <<-text これは利用例です。 <<~を使用するとインデントを無視します text end puts test_2
これは利用例です。 <<~を使用するとインデントを無視します
↑こちらはインデントされているのがわかるでしょうか?
ヒアドキュメントには式展開が有効!
fruit = "りんご" f = <<text いらっしゃいませ、お客様! 本日のオススメフルーツは#{fruit}です! text puts f
いらっしゃいませ、お客様! 本日のオススメフルーツはりんごです!
ちなみに式展開を無効にするには↓のようにします
fruit = "りんご" f = <<'text' いらっしゃいませ、お客様! 本日のオススメフルーツは#{fruit}です! text puts f
いらっしゃいませ、お客様! 本日のオススメフルーツは#{fruit}です!
ヒアドキュメントは引数になる
a = "ご" # prependは渡された文字列を先頭に追加するメソッド a.prepend(<<text) いち に さん よん text puts a
いち に さん よん ご
<<識別子に対してメソッドを呼び出せる
#作成した文字列に、直接upcase(文字列を全て大文字にするメソッド)を呼び出す b = <<text.upcase abc def text puts b
ABC DEF
とりあえず、ここまでにしたいと思います。 ちょっと眠いので(笑)
参考 「プロを目指す人のためのRuby入門」 参照 ヒアドキュメント - Wikipedia