REPL 中的方法调用 returns 很奇怪什么都没有

method-call in REPL returns weirdly nothing

我最近正在尝试实现一个 mixin,它根据执行点的名称空间访问 configuration-object。我的 mixin 中的以下代码片段提取了该名称空间部分并将其缓存在 mixin-target 的实例变量中:

    if @asset_uri_helpers_config_ref.nil? == true then # initialize configuration-cache
      application_name = self.class.name.split('::').first # extract app-name from class-name
      @asset_uri_helpers_config_ref = Object.const_get("#{application_name}::Application").configuration
    end
    binding.pry # start the repl-session here

之后,我正在访问最初定义在 <<namespace>>::Application.configuration.assets() 的方法 @asset_uri_helpers_config_ref.assets()。上瘾的单元测试(我在其中标记了 configuration-object)运行(当然)很好。

随后的集成测试失败并找出发生了什么,我添加了上面概述的 repl-invokation。现在,在调查 return 值时,我得到以下输出:

[1] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets
=> 
[2] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> defined? @asset_uri_helpers_config_ref.assets()
=> "method"
[3] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets.pretty_inspect
=> [[:object_id, [], nil],
 [:pretty_print,
  [#<Pry::ColorPrinter:0x007fb47b971058
    @buffer=[],
...
[4] pry(#<Collaboration::Views::Assets::UseUriHelpers>)> @asset_uri_helpers_config_ref.assets.nil?
=> [[:object_id, [], nil],
 [:pretty_print,
  [#<Pry::ColorPrinter:0x007fb47b971058
    @buffer=[],
...

我不知道我在这里得到了什么 - 任何再次检查 return 值的尝试 f.e。 nil?(命令 #4)失败。它在某种程度上看起来像一个异常 - 但即使我直接调用 .assets()(命令 #1)也应该抛出错误。

谁能解释一下我在这里得到了什么?

上面的输出来自BasicObject

我正在访问错误的 Class,因此得到一个 BasicObject 推导返回,它将所有 method_missing-invokations 追加到数组中。

@florian 你选错了配置。

您应该参考 Web::Assets.configuration.prefix,而不是 Web::Application.configuration.assets

后者是"accumulates"所有命令的代理,然后将它们应用到目标配置。