【问题标题】:Where is the scope variable declared in this source code?此源代码中声明的范围变量在哪里?
【发布时间】: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


【解决方案1】:

这是warden 的东西。看看这个

https://github.com/wardencommunity/warden/blob/master/lib/warden/strategies/base.rb

这一行

class Base < ::Warden::Strategies::Base

应该给你一个提示:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-09-18
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2011-01-03
    • 1970-01-01
    相关资源
    最近更新 更多