【问题标题】:What does the "$" character mean in Ruby?Ruby 中的“$”字符是什么意思?
【发布时间】:2009-12-13 15:53:56
【问题描述】:

使用 Ruby on Rails 已经有一段时间了,因此决定查看实际源代码。从 GitHub 上获取 repo 并开始四处寻找。遇到一些我不确定它做什么或它引用什么的代码。

我在 actionmailer/test/abstract_unit.rb 中看到了这段代码

root = File.expand_path('../../..', __FILE__)
 begin
 require "#{root}/vendor/gems/environment"
 rescue LoadError
 $:.unshift("#{root}/activesupport/lib")
 $:.unshift("#{root}/actionpack/lib")
end

lib = File.expand_path("#{File.dirname(__FILE__)}/../lib")
$:.unshift(lib) unless $:.include?('lib') || $:.include?(lib)

require 'rubygems'
require 'test/unit'

require 'action_mailer'
require 'action_mailer/test_case'

谁能告诉我 $:(又名“金光闪闪”)指的是什么?

【问题讨论】:

    标签: ruby-on-rails ruby global-variables dollar-sign load-path


    【解决方案1】:

    $ 标识全局变量,而不是局部变量、@instance 变量或@@class 变量。

    在语言提供的全局变量中,有$:,它也由$LOAD_PATH标识

    【讨论】:

      【解决方案2】:

      $: 是用于查找外部文件的全局变量。

      来自http://www.zenspider.com/Languages/Ruby/QuickRef.html#18

      $:通过 load 或 require 加载脚本和二进制模块的路径。

      【讨论】:

      【解决方案3】:

      我想指出一些关于 Ruby 的奇怪之处!

      $ 确实意味着加载路径。而; 表示“结束行”。但是!

      $; 表示字段分隔符。尝试在您的 REPL 中运行 $;.to_s,您会看到它返回 ","。那不是全部! $ with other suffixes can mean many other things.

      为什么? Well, Perl of course!

      【讨论】:

      • 谢谢,这正是我一直在寻找的,即使用 $ 来定义字段分隔符等等。
      【解决方案4】:

      引用Ruby Forum:

      ruby 带有一组预定义的变量

      $: = default search path (array of paths)
      __FILE__ = current sourcefile
      

      如果我做对了(不是 100% 肯定),这会将 lib 路径添加到此数组 通过遍历当前文件来搜索路径。这不完全是 最好的方法,我会简单地从 RAILS_ROOT 开始(至少对于一个 rails 项目)

      【讨论】:

        【解决方案5】:
        $:.unshift
        

        一样
        $LOAD_PATH.unshift
        

        。你也可以说:

        $: <<
        $LOAD_PATH <<
        

        它们是设置加载路径的非常常见的 Ruby 习惯用法。

        【讨论】:

          猜你喜欢
          • 2011-04-18
          • 2016-08-17
          • 2016-09-17
          • 2021-11-10
          • 2011-01-11
          • 2020-06-29
          • 1970-01-01
          • 2014-12-06
          • 1970-01-01
          相关资源
          最近更新 更多