Ruby Gold 認定試験の Ver 3 の勉強時に学んだことを備忘録として残しておく
環境
- ruby: 3.1.2
Numbered parameters
_1 から始まる _1, _2 で 第一引数, 第二引数の意味となる
以下は同じ意味
h = { a: 1, b: 2, c: 3 }
h.transform_values{|v| v * 2}
#=> {:a=>2, :b=>4, :c=>6}
h.transform_values{_1 * 2}
#=> {:a=>2, :b=>4, :c=>6}
h = { a: 1, b: 2, c: 3 }
h.map{|key, value| [key, value * 2]}.to_h
#=> {:a=>2, :b=>4, :c=>6}
h = { a: 1, b: 2, c: 3 }
h.map{[_1, _2 * 2]}.to_h
#=> {:a=>2, :b=>4, :c=>6}
#=> hash に対して map! はエラーとなる
<<EOF
, <<-EOF
, <<~EOF
の動作の違い
詳細は ヒアドキュメント 参照
・<<EOF
print <<EOF # 識別子 EOF までがリテラルになる
the string
next line
EOF
以下と同じ意味
print " the string\n next line\n"
・<<-EOF
if need_define_foo
eval <<-EOF # '<<-' を使うと……
def foo
print "foo\n"
end
EOF
#↑終端行をインデントできる
end
・<<~EOF
最もインデントが少ない行を基準にして、全ての行の先頭から空白を取り除く
インデントの深さを決定するため、タブやスペースで構成された行は無視されるので注意が必要
ただし、エスケープされたタブやスペースは通常の文字と同じように扱われる
expected_result = <<~SQUIGGLY_HEREDOC
This would contain specially formatted text.
That might span many lines
SQUIGGLY_HEREDOC
# => "This would contain specially formatted text.\n" + "\n" + "That might span many lines\n"