27438


## ネットでよく見かけるソース

[code]

    def hoge
      foo = '12345'
      a = <<~EOS
        foo: #{foo}
      EOS
    end
    
    print hoge
    
[/code]

## 結果

[code]

    foo: 12345
    #<-改行されている
    
[/code]

## 下記はエラー

[code]

    def hoge
      foo = '12345'
      a = <<~EOS
        foo: #{foo}\
      EOS
    end
    
[/code]

## エラー内容

`can't find string "EOS" anywhere before EOF`

## 質問

特に問題がないと言えば問題がないですが、ヒアドキュメントによって作られた文字列を含む変数などを`puts`で表示させると`ヒアドキュメントの最後の改行`と`putsの改行`のダブルの改行が出力されるわけです。一般的にヒアドキュメントの場合は`puts`とは一緒に使わないのでしょうか？
最後の改行を除去する方法はありますか？


CC BY-SA 3.0
2016-07-07T14:08:37.983
27435
2016-07-07T15:08:45.007
9008
question
ruby
ヒアドキュメントの最後の改行を除去することは不可能？　一般的にputsとは一緒に使わない？


`a.chomp` または `a.chomp!` します。

リファレンス：[chomp](http://ref.xaio.jp/ruby/classes/string/chomp)

ヒアドキュメント自体は行単位の入力なのでヒアドキュメントの入力指定での改行削除はないと思います。


CC BY-SA 3.0
2016-07-07T14:20:08.870
27436
2016-07-07T14:26:26.547
2016-07-07T14:26:26.547
5044
5044
27435
answer


`puts`に末尾が改行で終わっている文字列を渡しても、改行は1つしか出ません。  
なのでヒアドキュメントの場合も`puts`と一緒に使うことはよくあります。

> 末尾が改行で終っている引数や配列の要素に対しては puts 自身 は改行を出力しません。  
>  <http://docs.ruby-lang.org/ja/2.3.0/class/Kernel.html#M_PUTS>
>
> Writes a record separator (typically a newline) after any that do not
> already end with a newline sequence.  
>  <http://ruby-doc.org/core-2.3.1/IO.html#method-i-puts>


CC BY-SA 3.0
2016-07-07T15:08:45.007
27438
2016-07-07T15:08:45.007
2599
27435
answer