Назад към всички

Ruby

// Write reliable Ruby avoiding mutable string traps, block pitfalls, and metaprogramming bugs.

$ git log --oneline --stat
stars:1,933
forks:367
updated:March 4, 2026
SKILL.mdreadonly
SKILL.md Frontmatter
nameRuby
slugruby
version1.0.1
descriptionWrite reliable Ruby avoiding mutable string traps, block pitfalls, and metaprogramming bugs.
metadata[object Object]

Quick Reference

TopicFile
Mutable strings, object equalityobjects.md
Proc vs lambda, return behaviorblocks.md
Visibility, method_missingmethods.md
Array/hash mutation trapscollections.md
define_method, eval trapsmetaprogramming.md
ActiveRecord, N+1, callbacksrails.md

Critical Rules

  • Strings are mutable — s = "hi"; s << "!"; t = s means t also has "!"
  • == vs equal? vs eql?== value, equal? identity, eql? hash equality
  • Default hash value is shared — Hash.new([]) shares same array, use block form
  • return in proc returns from enclosing method — use lambda for local return
  • Block variable shadows outer scope — x = 1; [2].each { |x| }; x is still 1 (3.0+)
  • method_missing without respond_to_missing? — breaks respond_to? checks
  • private in Ruby is per-object — self.private_method fails, implicit receiver works
  • ||= doesn't work for false/nil distinction — false ||= true replaces false
  • Frozen string literals — # frozen_string_literal: true makes strings immutable
  • Symbol#to_proc&:method_name only works with no-argument methods
  • rescue => e without type — catches StandardError, not Exception
  • ensure always runs — even after return, use for cleanup