2009-04-20 21 views
5

私はRubyでブロックを使用しており、Javaでそれらを使用したいと考えています。 Groovyも同様の機能を提供しているようですが、構文や機能に大きな違いがあるかどうかを理解するためにGroovyについては十分に分かりません。RubyとGroovyのブロック間に大きな違いはありますか?

RubyブロックはGroovyブロックと同等ですか?

答えて

6

100%ではありません。 Rubyブロックでは、すべてのパラメータに名前を付ける必要があります(私が知る限り)。 Groovy内の、パラメータを指定していないブロックには、暗黙のパラメータが1つ含まれています(it)。

+0

が間違っています。 Groovyは名前付きパラメータをサポートしてブロックします。参照してください:http://groovy.codehaus.org/JN2515-Closures#JN2515-Closures-ClosureParameters – jiggy

+3

もちろん、Groovyはブロックの名前付きパラメータをサポートしています。 :-)私のコメントは、Groovyでは、ブロックに1つのパラメータがある場合、それはオプションであるのに対し、Rubyでは必須です。 –

+0

申し訳ありませんが、私は誤読しました:) – jiggy

1

ブロックは単なる無関係な機能です。私は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 
0

私は100%Rubyには慣れていませんが、私は答えがノーだと思います。 docをご覧ください。

関連する問題