用途:在创建或审查 Ruby 代码时提供规范,强调惯用、显式、可预测的写法;仅在 API 收益明确时才使用元编程。Web/MVC 场景应改用 ruby-on-rails 技能。
主要能力与约定:新代码使用 Ruby 3.4+,并遵循仓库的 .ruby-version / .tool-versions;使用 Bundler(Gemfile + Gemfile.lock),项目内二进制用 bundle exec;用 rake 执行任务;若项目已用 RuboCop 则沿用,不强行新增 cop;运行时允许时在生产启用 YJIT。组织上区分 lib/、bin/、test/ 或 spec/,gem 含 gemspec;非 Rails 应用可用 lib/my_app/ 与 exe/my_app。语言层面:新 API 用关键字参数,避免不透明 options hash;用 Data.define 定义不可变值对象,Struct 仅在项目已用时使用;对已知结构的 hash/JSON 用 case/in 模式匹配;用 Enumerable 替代 for,善用 each_with_object、filter_map、tally;项目采用时加 frozen_string_literal;||= 用于简单记忆化但注意 false/nil;内部用 require_relative,gem 用 require。
错误处理:异常用于异常失败;调用方总会处理时可用标签化返回(Success/Failure 或 [:ok, x]);定义 class NotFound < Error 层级,库中不 raise 字符串;只 rescue 具体异常,禁止 rescue nil / rescue Exception;I/O 边界翻译异常,领域核心尽量保持纯净。并发仅在模型明确时用 Ractors/线程,注意 GIL 限制 CPU 密集;外部 I/O 设超时。依赖最小化,避免废弃或与 stdlib 重叠的 gem,版本约束用 ~>。测试用项目既有的 RSpec 或 Minitest,测公共 API 行为,边界用 fake/stub,运行 bundle exec rspec 或 rake test。
限制:不假设 Rails(ActiveRecord、params、app/models);避免 method_missing/define_method 单一捷径、混用字符串/符号键、eval/class_eval 处理用户输入、吞掉 bug 的 rescue StandardError、可变常量作全局状态。完成标准:惯用 Ruby、类型清晰、边界错误显式、Gemfile 一致、关键路径测试通过、无无理由元编程。