[英]What does the “$” character mean in Ruby?
一直在使用Ruby on Rails并决定查看实际来源。 抓住GitHub的回购并开始环顾四周。 遇到一些代码,我不知道它做了什么或它引用了什么。
我在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'
有人能告诉我$ :(又名“bling”)引用了什么?
$
标识全局变量,而不是局部变量,@ instance变量或@@类变量。
语言提供的全局变量中有$:
,它也由$LOAD_PATH
标识
引用Ruby论坛:
ruby带有一组预定义变量
$: = default search path (array of paths)
__FILE__ = current sourcefile
如果我做对了(不是100%肯定),这将通过遍历当前文件将lib路径添加到此搜索路径数组。 这不是最好的方式,我只想从RAILS_ROOT开始(至少对于一个rails项目)
我想注意一些关于Ruby的奇怪之处!
$
确实意味着加载路径。 而且;
意思是“终点线”。 但!
$;
表示字段分隔符。 尝试在REPL中运行$;.to_s
,你会看到它返回","
。 那不是全部! $
与其他后缀可能意味着许多其他事情 。
为什么? 好吧,Perl当然!
$:.unshift
是相同的
$LOAD_PATH.unshift
。 你也可以说:
$: <<
$LOAD_PATH <<
它们是设置加载路径的常用Ruby习语。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.