我最近正在尝试实现一个 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
之后,我正在访问@asset_uri_helpers_config_ref.assets()
最初定义在<<namespace>>::Application.configuration.assets()
. 上瘾的单元测试(我在其中存根configuration
-object)(当然)运行良好。
随后的集成测试失败并找出发生了什么,我添加了上面概述的 repl-invokation。现在,在调查返回值时,我得到以下输出:
[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=[],
...
我不知道我在这里得到了什么 - 任何检查返回值的尝试 fe nil?
(命令#4)都失败了。它以某种方式看起来像一个异常 - 但是即使我.assets()
直接调用(命令#1)也应该抛出一个错误。
谁能解释我在这里得到什么?
上面的输出来自BasicObject
我访问了错误的类,因此得到了一个BasicObject
-derivation,它将所有 method_missing-invokations 附加到一个数组中。