欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 金融 > ruby内置全局变量

ruby内置全局变量

2025/4/19 18:52:02 来源:https://blog.csdn.net/qq_35628393/article/details/147106132  浏览:    关键词:ruby内置全局变量

以下是 Ruby 中常见的 内置全局变量 及其用途的详细说明。这些变量以 $ 开头,由 Ruby 解释器自动管理,用于访问系统状态、异常、输入输出等核心信息。


一、异常处理相关

全局变量说明示例
$!当前作用域最后抛出的异常对象(等同于 rescue => e 中的 e)。ruby<br>begin<br> 1/0<br>rescue<br> puts $!.message # => "divided by 0"<br>end
$@最后抛出异常的堆栈跟踪信息(等同 $!.backtrace)。ruby<br>puts $@ # => ["(irb):2:in `/'", "(irb):2:in `<main>'"]
$ERROR_INFO$! 的别名(需 require 'English' 后可用)。

二、输入输出相关

全局变量说明示例
$_最后通过 getsreadline 读取的输入行(隐式接收输入内容)。ruby<br>while gets<br> puts $_ # 输出当前行<br>end
$.当前输入流的行号(最后一次读取的行数)。```ruby
File.open(“test.txt”) do
$<当前输入流(默认是 ARGF,处理多文件输入时使用)。ruby<br>$<.each_line { |line| puts line }
$>默认输出流(默认是 $stdout,可重定向)。ruby<br>$> = File.open("output.log", "w")<br>puts "日志内容"

三、进程控制相关

全局变量说明示例
$?最后执行的子进程状态(Process::Status 对象)。ruby<br>`ls`<br>puts $?.success? # => true
$$当前 Ruby 进程的 PID(进程 ID)。ruby<br>puts $$ # => 12345
$0当前执行的脚本文件名(等同于 __FILE__)。ruby<br>puts $0 # => "script.rb"

四、字符串匹配相关

全局变量说明示例
$~最后一次正则表达式匹配的 MatchData 对象(等同 Regexp.last_match)。ruby<br>"hello" =~ /e/<br>puts $~[0] # => "e"
$&最后一次匹配的完整文本(等同 $~[0])。ruby<br>"abc" =~ /b/<br>puts $& # => "b"
$1, $2...最后一次正则匹配的分组捕获结果($1 对应第一个分组)。ruby<br>"2023-10-01" =~ /(\d{4})-(\d{2})-(\d{2})/<br>puts $1 # => "2023"

五、其他实用全局变量

全局变量说明示例
$:Ruby 的加载路径(等同于 $LOAD_PATH)。ruby<br>$: << "/custom/path"
$DEBUG表示是否在调试模式(由 -d--debug 参数启用)。ruby<br>puts $DEBUG # => false
$FILENAME当前 ARGF 处理的文件名(需 require 'English' 后可用)。
$PROGRAM_NAME当前程序名称(等同 $0)。

六、注意事项

  1. 可读性差
    全局变量如 $1$& 等缺乏语义,建议优先使用 MatchData 对象:

    if (match = text.match(/pattern/))puts match[1]
    end
    
  2. 线程安全问题
    全局变量在多线程环境中可能引发竞态条件,需谨慎使用。

  3. 部分变量已弃用
    $=(忽略大小写标志)在 Ruby 1.9+ 中已移除。


七、完整列表(部分)

Ruby 还包含更多内置全局变量,可通过 global_variables 方法查看:

puts global_variables
# => [:$;, $:, $., $<, $>, $0, $DEBUG, ...]

总结

虽然内置全局变量提供了便捷的系统访问能力,但在实际开发中应 优先使用更明确的替代方案(如显式异常对象、__FILE__ 常量等),以提升代码可读性和可维护性。

— END —

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词