当前位置: 首页 > news >正文

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 —

相关文章:

  • [硬件]单片机下载电路讲解-以ch340为例
  • Docker:安装与部署 Nacos 的技术指南
  • vscode 异常关闭后无法远程连接服务器
  • 大模型——Llama 4 系列登场 原生多模态 AI 创新的新起点
  • 阿里funASR在Ubuntu22环境部署启动步骤
  • HTTPS工作原理是什么?它是如何实现数据加密的?
  • 搭建Trae+Vue3的AI开发环境
  • Inverse Reinforcement Learning with Natural Language Goals论文阅读
  • 隐藏源站IP与SD-WAN回源优化:高防架构的核心实践
  • Elasticsearch 全面解析
  • 数据结构——哈希技术及链地址法
  • 推荐一款Nginx图形化管理工具: NginxWebUI
  • 工业科学级天文相机:跨界融合的高精密成像解决方案
  • wsl2+ubuntu22.04安装blender教程(详细教程)
  • Deep Learning based Prediction Model for Adaptive Video Streaming论文简报
  • 从数据海洋中“淘金”——数据挖掘的魔法与实践
  • 深度解析 AutoGLM:智能时代的多面手
  • Android Input——查找并添加目标窗口(七)
  • 解决MYSQL不能远程登陆问题
  • ubuntu24.04 cmake 报错 libldap-2.5.so.0 解决办法
  • 企业营销网站建设/批量查询神马关键词排名
  • 我要网站建设/seo整站优化吧
  • 网站建设哪家有实力/seo怎么做整站排名
  • 做公司网站需要准备什么科目/关键词排名怎么上首页
  • 杂志网站建设方案/网络营销推广总结
  • 西安网站建设公司都有哪些/网络培训