【发布时间】:2018-11-07 14:20:13
【问题描述】:
我一直在查看设计的源代码,因为我一生都无法弄清楚下面的代码块是如何工作的 (full source here)
def mapping
@mapping ||= begin
mapping = Devise.mappings[scope]
raise "Could not find mapping for #{scope}" unless mapping
mapping
end
end
我认为了解这段代码的大部分内容,但找不到声明/定义范围变量的位置。我搜索了存储库(以及它继承自的存储库),并查看了可用的测试以尝试更好地了解这里发生了什么,但在任何地方都找不到任何提及 scope 变量的内容。我还在学习 ruby,所以我错过了一些明显的/我在这里工作时不知道的语言结构吗?
【问题讨论】:
-
在它之前只有一行代码可以定义它。很容易验证它没有在那里定义,所以它不可能是一个变量,它必须是一个方法调用。
-
@JörgWMittag 如果您查看链接的源代码,该方法所属的类扩展了 Warden::Strategies::Base 类,它在该类中声明并定义了初始化方法中的值 - 我只是没有彻底搜索 Warden 存储库源以查看此定义
标签: ruby ruby-on-rails-3 devise