Menu
CoddyTech

do..end 与花括号

本课属于 Coddy Ruby 学习旅程的“逻辑与流程”单元。第 16 课,共 56 课。

Ruby 提供了两种编写代码块的方式。它们的含义相同,但各自适用于不同的场景。

do...end 用于多行代码块:

[1, 2, 3].each do |n|
  doubled = n * 2
  puts "#{n} -> #{doubled}"
end

花括号 { ... } 用于单行代码块,适合简短、表达式形式的代码:

[1, 2, 3].each { |n| puts n * 2 }

这两种写法的优先级略有不同,但学习者需要掌握的是风格规则:单行代码使用花括号,多行代码使用 do...end。

这两种形式都可以返回一个值。代码块的最后一个表达式会作为返回值传递给 map 这样的方法:

[1, 2, 3].map { |n| n * 10 }    # [10, 20, 30]
[1, 2, 3].map do |n|
  n * 10
end                              # [10, 20, 30]
challenge icon

挑战

简单

从输入中读取一个以逗号分隔的整数列表。输出两行:

  1. 将每个数字乘以 2,并用 , 连接。使用 map 的花括号形式。
  2. 对每个数字输出字符串 "<n> squared is <n*n>",每行一个。使用 each 的do...end形式。

对于输入 1,2,3,输出为:

2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9

亲手试试

numbers = gets.chomp.split(",").map(&:to_i)

# TODO:第 1 行,数值翻倍,用 map 的大括号形式,以 ", " 连接
# TODO:第 2..n 行,计算平方,用 each 的 do...end 形式
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: Ruby 在线编译器