引数なしの put には特別な動作があります。つまり、新しい行を出力します。それ以外の場合はすべて、すべての引数を配列として扱い、#to_s を使用してこれらの引数を文字列にマップし、各文字列を新しい行に出力します。そのため、呼び出し時に出力が得られませんputs []
。出力に新しい行が必要な場合は、puts
引数なしで呼び出すか (明白です)、次のように空の配列で splat 演算子を使用できますputs *[]
。
puts
物事をよりよく理解するために、独自の実装を書くことができます。
def my_puts(*args)
STDOUT.write("args is #{args.inspect}\n")
if args.empty?
STDOUT.write("\n")
else
args.each { |arg| STDOUT.write("#{arg.to_s}\n") }
end
end
1.9.3p194 :039 > my_puts
args is []
=> 1
1.9.3p194 :040 > my_puts []
args is [[]]
[]
=> [[]]
1.9.3p194 :041 > my_puts *[]
args is []
=> 1
1.9.3p194 :042 > my_puts 1,2,3
args is [1, 2, 3]
1
2
3
=> [1, 2, 3]
1.9.3p194 :043 > my_puts [1,2,3]
args is [[1, 2, 3]]
[1, 2, 3]
=> [[1, 2, 3]]
1.9.3p194 :044 > my_puts *[1,2,3]
args is [1, 2, 3]
1
2
3
=> [1, 2, 3]