Ruby: lambdaメソッドを使いブロックをオブジェクト化
· 3 min read
に関して、練習します。 他の言語と比較してRubyのコードブロックの扱いは特徴的で扱い難そうに見えますが、使いこなせればコード量を減らせるし、その結果として可読性も増すので、慣れていきたいです。
def times_n(n)
lambda { |x| x * n} # Kernel#lambdaの引数はブロック
# lambda do |x| x * n end でもよい(複数行に渉るときなど)。
end
times_ten = times_n(10) # nに10を代入
# 生成されたtimes_tenはProcインスタンス
p times_ten.class #=> Proc
# times_ten = { |x| x * n} はエラー。
# {}でのブロックはメソッドの引数としてのみ渡せる。
# また、ブロック引数はメソッドの最後の引数として定義する。
# ブロックの実行にはcallメソッドを用いる
p times_ten.call(5) # ブロック変数xに10が代入される
#=> 50
ここで、クラスProcとは
