▽1
●
nuna ●100ポイント ベストアンサー |
>1. (class<<self;self;end).module_evalは何をしているのでしょうか
このコードはトップレベルで実行されていますので、selfはmainオブジェクトです。
よって (class<<self;self;end) で main オブジェクトの特異クラスを得ています。
mainはObjectクラスのインスタンスですので、ほかのオブジェクトに影響を与えず、
mainにメソッド定義をするためにこうしているのでしょう。
>2. トップレベルにメソッド定義を記述するのと何が違うのでしょうか
ローカル変数 op を参照するためにdefine_methodを使っているのだと思います。
個人的にはやりたい事に対して手段が過剰な気がしますが……
def でメソッド定義をすると、メソッド内から外側のローカル変数は参照できません。
一方ブロックはそれが可能です。