我在this issue苦苦挣扎时偶然发现了这个-但我想这更多是Ruby语言级的查询。
我有一个接受四个参数的方法:
def render_node_to_output(node, output, context, skip_output = false)
((对于那些好奇的人,我所谈论的方法是Liquid::BlockBody::render_node_to_output
的liquid:4.0.3
(在Linux上,gems/liquid-4.0.3/lib/liquid/block_body.rb
的第102行)。]
在方法开始时,我inspect前三个变量为:
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
,并且对于失败情况,它们确实显示了可接受的值:Liquid::Context
和#<Liquid::Context:0x00007fffd43d9948>
。
我的查询是:
inspect
为什么在我明确传递一个论据时未收到该论据? 更重要的是,为什么仅对context
的某些值会发生这种情况?即使context
为nil
,inspect
也不应失败(ruby -e "x = nil; p x"
产生nil
)。我找不到关于inspect
为什么或何时以这种方式表现的任何参考。context
此类“不良”状态的正确方法,以便我至少可以继续检查“良好”值而不会在第一个“不良”状态下破坏程序-理想情况下,不使用尝试捕获策略?((我是Ruby的新手,如果我错过/误用了任何行话,我深表歉意。)
_argument错误说:given 0, expected 1
代表inspect
。这意味着此处调用的inspect
需要一个参数。但是inspect
总是应该在不带参数的情况下调用。
由此我得出结论,方法inspect
已为context.class
重新定义。