私はRubyを初めて使用します。私は高階関数を可能にする多くのC#とJavaScriptを使用しており、通常はそれらを日常的に使用しています。
しかし、Rubyは私には少し奇妙に思えます。関数は次のeach
ようになります。
def each
@items.each do |item|
yield(item)
end
end
items.each { |item| puts item }
それでも、Rubyは高階関数もある程度サポートしています。上記は次のように書き直すことができます。
def each(proc)
@items.each do |item|
proc.call item
end
end
items.each -> (item) { puts item } # Or...
items.each lambda { |item| puts item }
あるいは:
def each(&proc)
@items.each do |item|
proc.call item
end
end
# No difference in syntax.
items.each { |item| puts item }
これは他のほとんどの言語と同等であり、ほんの数文字長くなっています。ブロックを明示的に渡す代わりに、すべてがを使用しているようyield
です。
yield
それ自体はクレイジーで、魔法のようで、神秘的です。結局のところ、それは呼び出しの発信元に行き、呼び出しの直後にブロックをつかみます。これは奇妙で不自然に思えますが、他の言語でこの機能が類似していることを私は知りません。
それで、どうしたのyield
?