Hello World #

一、第一个Ruby程序 #

让我们从经典的"Hello World"开始Ruby之旅!

1.1 最简单的方式 #

打开终端,输入:

bash
ruby -e 'puts "Hello, World!"'

输出:

text
Hello, World!

1.2 创建脚本文件 #

创建文件 hello.rb

ruby
puts "Hello, World!"

运行脚本:

bash
ruby hello.rb

1.3 可执行脚本 #

创建文件 hello.rb

ruby
#!/usr/bin/env ruby
# encoding: utf-8

puts "Hello, World!"

添加执行权限:

bash
chmod +x hello.rb
./hello.rb

二、交互式Ruby(irb) #

irb是Ruby的交互式解释器,非常适合学习和测试。

2.1 启动irb #

bash
irb

输出:

text
irb(main):001:0>

2.2 在irb中执行代码 #

ruby
irb(main):001:0> puts "Hello, World!"
Hello, World!
=> nil

irb(main):002:0> 1 + 2
=> 3

irb(main):003:0> "Ruby".upcase
=> "RUBY"

irb(main):004:0> [1, 2, 3].sum
=> 6

2.3 irb常用命令 #

命令 功能
exitquit 退出irb
help 查看帮助
irb_info 显示irb配置信息
conf 查看配置
load 'file.rb' 加载文件
_ 上一个表达式的结果
ruby
irb(main):001:0> 10 + 20
=> 30
irb(main):002:0> _
=> 30
irb(main):003:0> _ * 2
=> 60

2.4 irb配置 #

创建 ~/.irbrc 文件自定义irb:

ruby
require 'irb/completion'
require 'irb/ext/save-history'

IRB.conf[:SAVE_HISTORY] = 1000
IRB.conf[:HISTORY_FILE] = "#{ENV['HOME']}/.irb_history"
IRB.conf[:AUTO_INDENT] = true
IRB.conf[:USE_AUTOCOMPLETE] = true

def clear
  system('clear')
end

def h(obj)
  puts `ri #{obj}`
end

三、puts、print与p #

3.1 puts #

puts 输出字符串并换行:

ruby
puts "Hello"
puts "World"

输出:

text
Hello
World

puts 对数组有特殊处理:

ruby
puts [1, 2, 3]

输出:

text
1
2
3

3.2 print #

print 输出字符串不换行:

ruby
print "Hello"
print "World"

输出:

text
HelloWorld

3.3 p #

p 输出对象的inspect结果,适合调试:

ruby
p "Hello"
p [1, 2, 3]
p { a: 1, b: 2 }

输出:

text
"Hello"
[1, 2, 3]
{:a=>1, :b=>2}

3.4 对比 #

ruby
str = "Hello\nWorld"

puts str
print str
p str

输出:

text
Hello
World
Hello
World
"Hello\nWorld"
方法 换行 转义处理 适用场景
puts 解释转义 正常输出
print 解释转义 不换行输出
p 显示转义 调试输出

四、获取用户输入 #

4.1 gets #

gets 从标准输入读取一行:

ruby
print "请输入你的名字: "
name = gets
puts "你好, #{name}"

运行:

text
请输入你的名字: Ruby
你好, Ruby

注意:gets 会包含换行符 \n

4.2 chomp #

chomp 移除字符串末尾的换行符:

ruby
print "请输入你的名字: "
name = gets.chomp
puts "你好, #{name}!"

4.3 gets.chomp简写 #

ruby
name = gets.chomp

4.4 完整示例 #

ruby
#!/usr/bin/env ruby
# encoding: utf-8

puts "=== 简单计算器 ==="

print "请输入第一个数字: "
a = gets.chomp.to_f

print "请输入运算符 (+, -, *, /): "
op = gets.chomp

print "请输入第二个数字: "
b = gets.chomp.to_f

result = case op
         when "+" then a + b
         when "-" then a - b
         when "*" then a * b
         when "/" then a / b
         else "未知运算符"
         end

puts "结果: #{a} #{op} #{b} = #{result}"

五、命令行参数 #

5.1 ARGV #

ARGV 数组存储命令行参数:

ruby
puts "参数个数: #{ARGV.length}"
puts "参数列表: #{ARGV.join(', ')}"
ARGV.each_with_index do |arg, i|
  puts "参数#{i}: #{arg}"
end

运行:

bash
ruby args.rb hello world 123

输出:

text
参数个数: 3
参数列表: hello, world, 123
参数0: hello
参数1: world
参数2: 123

5.2 参数处理示例 #

ruby
#!/usr/bin/env ruby

if ARGV.empty?
  puts "用法: ruby greet.rb 名字1 名字2 ..."
  exit 1
end

ARGV.each do |name|
  puts "你好, #{name}!"
end

5.3 选项解析 #

使用 OptionParser 处理命令行选项:

ruby
require 'optparse'

options = {}
OptionParser.new do |opts|
  opts.banner = "用法: ruby app.rb [选项]"

  opts.on("-n", "--name NAME", "指定名字") do |name|
    options[:name] = name
  end

  opts.on("-v", "--verbose", "详细输出") do
    options[:verbose] = true
  end

  opts.on("-h", "--help", "显示帮助") do
    puts opts
    exit
  end
end.parse!

puts "名字: #{options[:name]}" if options[:name]
puts "详细模式" if options[:verbose]

六、退出程序 #

6.1 exit #

exit 正常退出程序:

ruby
if condition
  exit
end

exit(0)

6.2 exit! #

exit! 立即退出,不执行ensure块:

ruby
exit!(1)

6.3 abort #

abort 打印错误信息并退出:

ruby
abort "发生错误,程序退出"

6.4 at_exit #

at_exit 注册程序退出时执行的代码:

ruby
at_exit do
  puts "程序即将退出"
end

puts "程序运行中"

七、实践练习 #

7.1 练习1:问候程序 #

创建一个程序,询问用户姓名和年龄,输出问候语:

ruby
print "请输入你的姓名: "
name = gets.chomp

print "请输入你的年龄: "
age = gets.chomp.to_i

puts "你好, #{name}!你今年#{age}岁。"
puts "明年你将#{age + 1}岁。"

7.2 练习2:温度转换 #

创建一个温度转换程序:

ruby
print "请输入温度值: "
temp = gets.chomp.to_f

print "请输入单位 (C/F): "
unit = gets.chomp.upcase

case unit
when "C"
  fahrenheit = temp * 9 / 5 + 32
  puts "#{temp}°C = #{fahrenheit.round(2)}°F"
when "F"
  celsius = (temp - 32) * 5 / 9
  puts "#{temp}°F = #{celsius.round(2)}°C"
else
  puts "未知单位"
end

7.3 练习3:猜数字游戏 #

ruby
target = rand(1..100)
guesses = 0

puts "猜数字游戏 (1-100)"

loop do
  print "请输入你的猜测: "
  guess = gets.chomp.to_i
  guesses += 1

  if guess == target
    puts "恭喜你猜对了!用了#{guesses}次"
    break
  elsif guess < target
    puts "太小了,再试试"
  else
    puts "太大了,再试试"
  end
end

八、调试技巧 #

8.1 使用p调试 #

ruby
def calculate(a, b)
  p a: a, b: b
  result = a * b
  p result: result
  result
end

8.2 使用pp #

pp 格式化输出:

ruby
require 'pp'

data = {
  users: [
    { name: "Alice", age: 25 },
    { name: "Bob", age: 30 }
  ]
}

pp data

8.3 使用binding.irb #

Ruby 2.5+ 内置调试断点:

ruby
def complex_method(data)
  processed = data.map { |x| x * 2 }
  binding.irb
  processed.sum
end

程序会在 binding.irb 处暂停,进入irb环境,可以检查变量。

8.4 使用byebug gem #

bash
gem install byebug
ruby
require 'byebug'

def debug_method
  x = 10
  byebug
  y = x * 2
  y
end

九、总结 #

本章我们学习了:

  1. 运行Ruby程序:使用 ruby 命令运行脚本
  2. irb交互式环境:实时测试Ruby代码
  3. 输出方法:puts、print、p的区别
  4. 用户输入:gets和chomp
  5. 命令行参数:ARGV数组
  6. 调试技巧:p、pp、binding.irb

现在你已经能够编写简单的Ruby程序了!接下来让我们学习Ruby的数据类型。

最后更新:2026-03-27