レシーバを変える

f = lambda do
  p self
end

f.call

String.new.instance_eval(&f)

String.module_eval(&f)


main
""
String

追記
レシーバにかかわらず、コンテキストは憶えている…と。

def make_f
  a = 100

  lambda do
    p self
    p a
  end
end

f = make_f

f.call

String.new.instance_eval(&f)

String.module_eval(&f)


main
100
""
100
String
100