ルビーを始めたばかりで、頭をブロックに巻き付けることができません
匿名関数とはどう違うのですか?
どのインスタンスでそれを使用したいですか?
そして、匿名関数よりもいつそれを選択しますか?
ルビーを始めたばかりで、頭をブロックに巻き付けることができません
匿名関数とはどう違うのですか?
どのインスタンスでそれを使用したいですか?
そして、匿名関数よりもいつそれを選択しますか?
Rubyには、JavaScriptのような無名関数はありません(たとえば)。ブロックには3つの基本的な用途があります。
Proc
の作成ブロックが無名関数に似ている例はここにあります(RubyとJavaScript)。
ルビー:
[1,2,3,4,5].each do |e| #do starts the block
puts e
end #end ends it
JS(jQuery):
$.each([1,2,3,4,5], function(e) { //Anonymous *function* starts here
console.log(e);
}); //Ends here
Rubyブロック(および無名関数)の力は、それらを任意のメソッド(定義したメソッドを含む)に渡すことができるという事実です。したがって、独自の各メソッドが必要な場合は、次のように実行できます。
class Array
def my_each
i = 0
while(i<self.length)
yield self[i]
i+=1
end
end
end
たとえば、次のようなメソッドを宣言すると、次のようになります。
def foo(&block)
end
block
渡されたブロックを表すProc
オブジェクトです。したがってProc.new
、次のようになります。
def Proc.new(&block)
block
end
ブロックは、必然的に、メソッドにバインドされます。それらは、私が上で説明したような方法によってのみオブジェクトに変換することができます。の正確な実装はわかりませんがlambda
(追加の引数チェックを行います)、同じ考えです。
したがって、ブロックの基本的な考え方は次のとおりです。引数Proc
によってオブジェクトに含めるか、キーワードによって呼び出すことができる、メソッドにバインドされたコードのブロック。&
yield