Я столкнулся с этим, когда боролся с этой проблемой - но я думаю, что это скорее запрос на уровне языка Ruby.
У меня есть метод, который принимает четыре параметра:
def render_node_to_output(node, output, context, skip_output = false)
(Для любопытных я говорю о методе Liquid::BlockBody::render_node_to_output
из liquid:4.0.3
(на Linux, строка 102 на gems/liquid-4.0.3/lib/liquid/block_body.rb
).)
В самом начале метода я проверяю первые три переменные следующим образом:
p node
p output
p context
print("\n\n")
Этот метод неоднократно вызывается различными компонентами, и в некоторые моменты я получаю ошибка:
/root/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/jekyll-3.8.5/lib/jekyll/filters.rb:292:in `inspect': wrong number of arguments (given 0, expected 1) (ArgumentError)
from /root/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:105:in `inspect'
from /root/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:105:in `p'
from /root/.rbenv/versions/2.7.0/lib/ruby/gems/2.7.0/gems/liquid-4.0.3/lib/liquid/block_body.rb:105:in `render_node_to_output'
Видимо, переменная context
в какой-то момент переходит в какое-то "несуществующее" (?) состояние.
Я пытался добавить print(context.class)
и print(context)
прямо перед p context
, и они отображают одинаковые , допустимые значения для сценария как успеха, так и неудачи ios: Liquid::Context
и #<Liquid::Context:0x00007fffd43d9948>
.
Мои запросы:
- почему
inspect
говорит, что не получил аргумент, когда я его явно передал? Что еще более важно, почему это происходит только для некоторых значений context
? AFAIK, даже если context
были nil
, inspect
не должен завершиться ошибкой (ruby -e "x = nil; p x"
производит nil
). Я не смог найти никаких ссылок на то, почему или когда inspect
мог бы вести себя таким образом. - , как правильно пропустить такие "плохие" состояния
context
, чтобы я мог, по крайней мере, продолжить проверка «хороших» значений без прерывания программы в первом «плохом» состоянии - в идеале без использования стратегии try-catch?
(я довольно новичок в Ruby, поэтому извиняюсь, если я пропустил / неправильно использовал любой жаргон.)