ルビ初心者の質問です。このコードを変更する最も簡単な方法は何ですか?ただし、ブロックを完全にそのままにして、副作用を排除しますか?
x = lambda { |v| x = 2 ; v}
x.call(3)
#=> 3
x
#=> 2
これは、私の問題を説明するために考案できる最も単純な例であるため、「割り当てを削除する」または「Proc を x に割り当てない」は、私が探しているものではありません。
元の囲んでいるスコープに影響を与えずに割り当てることができる Proc (またはラムダ) にローカル変数を設定したいと考えています。ブロックをラップするクラスまたはモジュールを動的に作成することもできますが、そのような基本的なことにはやり過ぎのようです。
私がやろうとしていることと同等のPython:
def x(v):
x = 2 # this is a local variable, what a concept
return v