在调试控制台中,当应用程序运行时(使用 binding.pry 中断它),我可以看到我的变量 Rails.configuration.hardcoded_current_user_key
已设置:
pry(#<TasksController>)> Rails.configuration.hardcoded_current_user_key
=> "dev"
但它似乎没有被定义:
pry(#<TasksController>)> defined?(Rails.configuration.hardcoded_current_user_key)
=> nil
然而它可以很好地存储和测试它的值:
pry(#<TasksController>)> tempVar = Rails.configuration.hardcoded_current_user_key
=> "dev"
pry(#<TasksController>)> defined?(tempVar)
=> "local-variable"
这是怎么回事?
最佳答案
这是因为 Rails 配置 implements respond_to?
但不是 respond_to_missing?
和 defined?
只有 recognizes respond_to_missing?
:
class X
def respond_to?(name, include_all = false)
name == :another_secret || super
end
private
def method_missing(name, *args, &block)
case name
when :super_secret
'Bingo!'
when :another_secret
'Nope.'
else
super
end
end
def respond_to_missing?(name, include_all = false)
name == :super_secret || super
end
end
x = X.new
puts x.super_secret # => Bingo!
p defined?(x.super_secret) # => "method"
puts x.another_secret # => Nope.
p defined?(x.another_secret) # => nil
是recommended实现 respond_to_missing?
和 method_missing
,我也想知道为什么 Rails 会那样做。
关于ruby-on-rails - Rails/Ruby 错误地显示变量未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40184952/