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"所有命令的代理,然后将它们应用到目标配置。
我最近正在尝试实现一个 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"所有命令的代理,然后将它们应用到目标配置。