Есть ли существенные различия между блоками в Ruby и Groovy? - PullRequest
5 голосов
/ 20 апреля 2009

Я использую блоки в Ruby и хотел бы использовать их в Java. Groovy, похоже, предлагает аналогичную функцию, но я не знаю достаточно о Groovy, чтобы понять, есть ли существенные различия в синтаксисе и функциональности.

Является ли блок Ruby эквивалентным блоку Groovy?

Ответы [ 3 ]

6 голосов
/ 20 апреля 2009

Не 100%. Блоки Ruby требуют, чтобы вы назвали все ваши параметры (насколько я знаю). Блок в Groovy, в котором не указаны параметры, имеет один подразумеваемый параметр, it.

1 голос
/ 20 апреля 2009

Блок - это в некотором смысле просто любая функция. Я никогда не программировал Java, но вот несколько примеров кода для других языков, чтобы показать вам, что блоки похожи на передачу анонимных функций.

Ruby:

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 поддерживает подобные анонимные функции, вы получаете себе блок! Поскольку они являются функциями, они могут принимать аргументы, как блоки. Вот еще один пример Lua:

local function add_something(callback)
  callback(5 / 2);
end

add_something(function(a)
  print(a + 5);
end)
-- 7.5
0 голосов
/ 22 апреля 2009

Я не на 100% знаком с Ruby, но я думаю, что ответ - нет. Взгляните на документ .

...