Ruby 是动态类型的 — 变量不声明类型,可以存储任何值。Ruby 有几种基本类型(都是对象),并使用命名约定(sigils)来指示变量作用域。
变量和动态类型
ruby
count = 42 # no type declaration — inferred
name = "Ann"
count = "now a string" # dynamically typed — can change type
42 # Integer
3.14 # Float
"hello" # String
:symbol # Symbol (an immutable, interned identifier)
true / false # Boolean (TrueClass / FalseClass)
nil # NilClass — "nothing" (Ruby's null)
[1, 2, 3] # Array
{ a: 1 } # Hash (key-value)
1..10 # Range
name = "local" # local variable (lowercase)
@instance = "instance" # @ → INSTANCE variable (per object)
@@class_var = "class" # @@ → CLASS variable (shared across instances)
$global = "global" # $ → global variable (avoid)
CONSTANT = "constant" # Uppercase start → CONSTANT (convention; can change with warning)
Ruby 使用 sigils(前缀)来表示变量作用域:普通名称是局部的,@ 表示实例变量,@@ 表示类变量,$ 表示全局变量(不推荐),大写字母表示常量。这是 Ruby 的独特之处 — 前缀让你一眼就能看出作用域。
# in Ruby, ONLY false and nil are falsy — EVERYTHING else is truthy
puts "truthy" if 0 # prints — 0 is TRUTHY in Ruby! (unlike many languages)
puts "truthy" if "" # prints — empty string is truthy too
puts "falsy" unless nil # nil is falsy
只有 false 和 nil 是假值在 Ruby 中 — 0、""、[] 都是真值(与许多语言不同,在那些语言中 0/空值是假值)。这是一个常见的陷阱。
理解 Ruby 的变量和基本类型是日常基础知识。
Ruby 是动态类型的(变量可以存储任何值,无需类型声明),其独特之处在于它使用命名约定(sigils)来指示变量作用域 — @ 表示实例变量,@@ 表示类变量,$ 表示全局变量,大写字母表示常量 — 因此变量的前缀能让你一眼看出其作用域,这对于正确阅读和编写 Ruby 代码至关重要(尤其是在类中频繁使用的 @instance 变量)。
了解基本类型(在 Ruby 的纯面向对象模型中都是对象) — 包括独特的 Symbol 类型 — 对于处理数据是必要的。
一个特别重要的怪癖是要理解 Ruby 的真值性:只有 false 和 nil 是假值,而其他所有值(包括 0、""、[])都是真值 — 这与许多语言不同(在那些语言中 0 或空值是假值),是来自其他语言的开发人员常见的 bug 来源。
理解动态类型、指示作用域的命名约定、基本类型,特别是仅 false-和-nil-为假的真值性规则,是编写正确 Ruby 代码和避免常见陷阱的基础,使其成为这种语言的必知知识。