🔖
IO#puts の挙動
まとめ
- 末尾が "\n"(0x0a) でない場合、暗黙に "\n" を足す。
- 環境に依存しない動作
- Cf. Environment.NewLine
動作確認
Rails Console で書き込みをする
irb(main):029:0> f = File.open("1rn.txt",'w+b')
=> #<File:1rn.txt>
irb(main):031:0> f.puts "1\r\n"
=> nil
irb(main):032:0> f.close
=> nil
irb(main):033:0> f = File.open("1r.txt",'w+b')
=> #<File:1r.txt>
irb(main):034:0> f.puts "1\r"
=> nil
irb(main):035:0> f.close
=> nil
irb(main):036:0> f = File.open("1n.txt",'w+b')
=> #<File:1n.txt>
irb(main):037:0> f.puts "1\n"
=> nil
irb(main):038:0> f.close
=> nil
irb(main):039:0> f = File.open("1.txt",'w+b')
=> #<File:1.txt>
irb(main):040:0> f.puts "1"
=> nil
irb(main):041:0> f.close
=> nil
書き込みされたファイルを確認する
❯ xxd 1rn.txt
00000000: 310d 0a 1..
❯ xxd 1r.txt
00000000: 310d 0a 1..
❯ xxd 1n.txt
00000000: 310a 1.
❯ xxd 1.txt
00000000: 310a 1.
→ "1\r" や "1" だけ書き込んだ場合 "\n" が足されている
→ "\n" で終わっている場合は足されてない
ソースコード
- File#puts は IO を継承
IO から継承しているメソッド
puts
- IO#puts
puts
は rb_f_puts
によって define される
標準出力に書き出す場合 rb_io_puts
が呼ばれる
line が "\n" で終わってない場合、line のさらに後に rb_default_rs
が足される
rb_default_rs
は "\n"
終わり □
Discussion