私はRubyでブロックを使用しており、Javaでそれらを使用したいと考えています。 Groovyも同様の機能を提供しているようですが、構文や機能に大きな違いがあるかどうかを理解するためにGroovyについては十分に分かりません。RubyとGroovyのブロック間に大きな違いはありますか?
RubyブロックはGroovyブロックと同等ですか?
私はRubyでブロックを使用しており、Javaでそれらを使用したいと考えています。 Groovyも同様の機能を提供しているようですが、構文や機能に大きな違いがあるかどうかを理解するためにGroovyについては十分に分かりません。RubyとGroovyのブロック間に大きな違いはありますか?
RubyブロックはGroovyブロックと同等ですか?
100%ではありません。 Rubyブロックでは、すべてのパラメータに名前を付ける必要があります(私が知る限り)。 Groovy内の、パラメータを指定していないブロックには、暗黙のパラメータが1つ含まれています(it
)。
ブロックは単なる無関係な機能です。私はJavaをプログラミングしたことはありませんが、ブロックが匿名関数を渡すのと同様であることを示す他の言語のコードサンプルがいくつかあります。
ルビー:
def add_5
puts yield + 5
end
add_5 { 20 }
# => 25
Javascriptを:
var add_5 = function(callback){
return callback.call() + 5;
}
add_5(function(){ return 20 });
// returns 25
Luaは:つまり
local function add_5(callback)
print(callback() + 5);
end
add_5(function()
return 20;
end)
-- returns 25
、Javaはそのような無名関数をサポートしている場合は、ブロックは自分で持って!関数なので、ブロックのように引数を取ることができます。ここに別のルアの例があります:
local function add_something(callback)
callback(5/2);
end
add_something(function(a)
print(a + 5);
end)
-- 7.5
私は100%Rubyには慣れていませんが、私は答えがノーだと思います。 docをご覧ください。
が間違っています。 Groovyは名前付きパラメータをサポートしてブロックします。参照してください:http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy
もちろん、Groovyはブロックの名前付きパラメータをサポートしています。 :-)私のコメントは、Groovyでは、ブロックに1つのパラメータがある場合、それはオプションであるのに対し、Rubyでは必須です。 –
申し訳ありませんが、私は誤読しました:) – jiggy