プロが教える店舗&オフィスのセキュリティ対策術

def hoge(step = 1)
current = 0
Proc.new {
current += step
}
end

p1 = hoge
p2 = hoge(2)

p1.call
p1.call
p1.call
p2.call
p2.call

p p2.call

このコードなのですが、
p1=hoge
hogeメソッドはオブジェクト化されているわけでもないのに何故代入できているのでしょうか?
また、
p2=hoge(2)
はどうなっているのでしょうか?step=1がstep=2に置き換わったのでしょうか?
どなたか教えて頂けると嬉しいです。

A 回答 (1件)

> hogeメソッドはオブジェクト化されているわけでもないのに何故代入できているのでしょうか?



メソッドを代入しているわけじゃなくて、メソッドを呼び出した返り値を代入しています。つまり、Proc.newしたオブジェクトですね。

> はどうなっているのでしょうか?step=1がstep=2に置き換わったのでしょうか?

引数stepに2を代入したことになります。引数を省略した場合(最初の例のp1=hoge)だと、stepは1です。
    • good
    • 0
この回答へのお礼

成程、詳しい解説をありがとうございました。とてもすっきりしました。

お礼日時:2019/10/12 19:56

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!