2016-12-12 2 views
1

Я видел стиль настройки параметров метода в блоке (например, в Фарадея), как это:Настройка параметров в блоке

conn.post do |req| 
    req.url '/nigiri' 
    req.headers['Content-Type'] = 'application/json' 
    req.body = '{ "name": "Unagi" }' 
end 
  1. Что это называется?
  2. Как это работает под капотом?

ответ

2

Это пример функции «более высокого порядка». conn.post это метод, который вызывает другой метод (который вы определяете в блоке)

Это простой пример:

def call_block; yield; end 
puts call_block { true } 
# => true 

вы можете передать аргументы yield, а также:

def yield_args(*args) 
    yield args 
end 
yield_args(1, 2) { |item| item } 
# => [1,2] 
+0

Nice объяснение , Также стоит упомянуть, что причина, по которой вы сделаете это в ситуации, подобной упомянутой OP, заключается в том, что 'conn.post' мог выполнить начальную работу по созданию объекта' req', предоставить этому блоку возможность дальнейшей настройки объект, а затем, возможно, предпримите дальнейшие действия с 'req' после того, как была выполнена настройка. – Max

+0

Я думаю, что все это «вы можете превратить блок в прок вроде этого» здесь не имеет значения. –

Смежные вопросы