динамическое вложение рубиновых блоков

Вы попробовали val?

$("textarea#ExampleMessage").val(result.exampleMessage);
5
задан bvk 29 July 2009 в 09:07
поделиться

2 ответа

Мне кажется, что это лучше всего сделать с помощью рекурсии

Вот код:

def using_resources(*res, &block)

   first_resource = res.shift

   if res.length > 0 
     first_resource.run do
      using_resources(*res, &block)
     end
   else
     first_resource.run do
       block.call
     end
   end

end

И используйте его так:

using_resources Resource.new('/tmp'), Resource.new('http://stackoverflow.com') do
  do_some_processing
end

Вы действительно говорите, "который принимает массив ресурсов ". Если у вас уже есть массив и вам нужно его использовать, вы можете разместить массив вне вызова:

 using_resources *my_array do
   do_some_processing
 end

или внутри определения метода, что позволяет вам вызывать его либо с массивом или списком ресурсов s:

def using_resources(*res, &block)
  res = [*res]
  # rest as above
end
9
ответ дан 18 December 2019 в 10:47
поделиться

Вы также можете сделать это с помощью #inject :

def using_resources(*resources, &block)
  (resources.inject(block){ |inner,resource| proc { resource.run(&inner) } })[]
end

По мере того, как вы проходите по массиву, вы оборачиваете каждый вызов ресурса предыдущей процедуры в новую процедуру, а затем передать это следующему ресурсу. Блокировки будут в обратном порядке (последний указанный ресурс будет разблокирован первым), но это можно изменить, используя resources.reverse.inject ...

7
ответ дан 18 December 2019 в 10:47
поделиться
Другие вопросы по тегам:

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