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

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

const fieldControl = myForm.get(fieldPath); // see FormGroup.get(path)
// adding new validator while keeping old ones with fieldControl.validator since setValidators() resets validators
fieldControl.setValidators([validator, fieldControl.validator]);
fieldControl.updateValueAndValidity();

Это означает, что вы можете получить все свои валидаторы с помощью fieldControl.validator и сделать все, что вы хотите с ним.

5
задан niton 18 April 2015 в 12:31
поделиться

3 ответа

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

6
ответ дан 14 December 2019 в 09:00
поделиться

Блок - это, в некотором смысле, любая функция. Я никогда не программировал 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
1
ответ дан 14 December 2019 в 09:00
поделиться

I'm not 100% familiar with Ruby, but I think the answer is no. Have a look at the doc.

0
ответ дан 14 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: