'ArgumentError:参数数量错误'在Ruby inspect上(相同的代码行,仅适用于某些值)

问题描述 投票:0回答:1

我在this issue苦苦挣扎时偶然发现了这个-但我想这更多是Ruby语言级的查询。

我有一个接受四个参数的方法:

def render_node_to_output(node, output, context, skip_output = false)

((对于那些好奇的人,我所谈论的方法是Liquid::BlockBody::render_node_to_outputliquid: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的某些值会发生这种情况?即使contextnilinspect也不应失败(ruby -e "x = nil; p x"产生nil)。我找不到关于inspect为什么或何时以这种方式表现的任何参考。
  • 什么是跳过context此类“不良”状态的正确方法,以便我至少可以继续检查“良好”值而不会在第一个“不良”状态下破坏程序-理想情况下,不使用尝试捕获策略?

((我是Ruby的新手,如果我错过/误用了任何行话,我深表歉意。)

ruby inspect
1个回答
0
投票

_argument错误说:given 0, expected 1代表inspect。这意味着此处调用的inspect需要一个参数。但是inspect总是应该在不带参数的情况下调用。

由此我得出结论,方法inspect已为context.class重新定义。

© www.soinside.com 2019 - 2024. All rights reserved.