は、私は私のように奇妙打つRubyの方法、手順、およびブロックに関するカップルの質問があります。意思決定の背後にある論理と同じように、構文や機能についてのものではありません。Rubyのメソッド、PROC、およびブロック混乱
質問1:
なぜブロックは方法(例えば、各々)に渡すことができるが、それらは、変数に割り当てることができないことですか!
プロシージャでそれらを渡すことができます(つまり、&p
でアクセスされる)p = Proc.new {...}
ですが、プログラマがこれらの手段を通過するようには意味がありません。
質問2:
なぜ方法及び手順の区別がありますか?
def square(x)
x**2
end
square(3)
=> 9
または
square = lambda {|x| x**2}
square.call(3)
=> 9
なぜ分化:
は例えば、私は、次の2つの方法でその機能を関数を定義し、呼び出しのタスクを達成することができますか?例えばPythonでは、標準的な方法で関数を定義することとsquare = lambda x: x**2
によって関数を作成し、それをsquare
に割り当てるという同じタスクを達成します。
Rubyはすべてのものがオブジェクトであると主張しています。ブロックはそれに合わせるためにオブジェクトでなければならず、引数として渡すことができるため、いくつかの点でオブジェクトのように確実に動作します。 – rpjohnst
ブロックは、それらを表現するオブジェクト、すなわちprocまたはlambdaを作成することによって、オブジェクトのように動作するようにすることができます。そのデバイスがなければ、それらは構文的な構造にすぎません。 – Pinochle
ブロックオブジェクトがあります - それはlambda {何でも}の目的です。 – Chuck