2015-10-21 2 views
1

Шутки в сторону, у меня странная ситуация, у меня есть некоторый код:в рубине, когда блок не является блоком?

def remotes(form,remotes) 
    personalised_form = form.dup 
    remotes.each do |ident,remote| 
    object = yield(ident) 
    result = remote.call(object) 
    insert_into_(personalised_form,ident,result) 
    end 
    personalised_form 
end 

И я вижу, если это работает так:

pp remotes(forms,remotes) do |ident| 
    case(ident) 
    when :get_assets 
     '@Userobject' 
    end 
end 

Проблема в том, что рубин, кажется, думает я 'm не передает блок функции remotes.

Почему рубин настаивает на том, чтобы я не проходил блок? (он дает no block given (yield) (LocalJumpError)).

Мысли это не имеет значения, пульты является хеш с ключом и проками, и форма только специфический структурированный хэш, который имеет результат ргоса вставленный в него с помощью иденту, чтобы найти правильную точку для вставки

+0

Я бы порекомендовал просить об этом в комнате общения SO Ruby. Это немного расплывчатая ИМО. – onebree

+0

он считает, что вы передаете блок на: pp, но не на: remotes – intale

ответ

5

Ruby думает, что вы передаете блок методу pp, который просто игнорирует его. Попытайтесь:

res = remotes(forms,remotes) do |ident| 
    case(ident) 
    when :get_assets 
     '@Userobject' 
    end 
end 

pp res 
+0

hmmm Я вижу, это действительно устранило проблему, я думаю, мне следовало бы поставить скобку вокруг вызова функции remotes; Я предполагаю, что это был вопрос приоритетности, более уставший, тогда я подумал: Р, спасибо. – Thermatix

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