0Pricing
Ruby Academy · 课时

Lambdas

严格参数数量的过程对象

Lambdas 是 CoddyKit 上的免费 Ruby Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Ruby Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Ruby Academy 课程共包含 4 节课。

严格参数数量的 Proc 对象

lambda 函数是一种特殊的 Proc 对象,行为更像普通方法:它会检查参数数量,并以通常的方式处理 return。当您希望获得可预测、类似方法的行为时,可以使用它。

square = lambda { |x| x * x }
puts square.call(6)

箭头式 lambda 函数

箭头语法 -> 也被称为“箭头式 lambda 函数”,是编写 lambda 函数最常见的方式。参数放在圆括号中。

add = ->(a, b) { a + b }
puts add.call(4, 5)

调用 lambda 函数

lambda 函数支持与 Proc 对象相同的调用方式:.call、.() 和 [ ]。

triple = ->(x) { x * 3 }
puts triple.call(2)
puts triple.(2)
puts triple[2]

严格检查参数

与 Proc 对象不同,如果传入的参数数量不正确,lambda 函数会引发 ArgumentError。这有助于尽早发现错误。

greet = ->(name) { "Hi #{name}" }
puts greet.call("Sam")
begin
  greet.call
rescue ArgumentError => e
  puts "Error: #{e.message}"
end

返回语句保持局部作用域

lambda 函数中的 return 只会退出该 lambda 函数,随后程序继续执行。这与方法的行为一致。

def demo
  l = -> { return 10 }
  l.call
  20  # this runs
end
puts demo

检查是否为 lambda 函数

Proc 对象和 lambda 函数都是 Proc 的实例。使用 lambda? 可以区分它们。

l = ->(x) { x }
pr = proc { |x| x }
puts l.lambda?
puts pr.lambda?

不带参数的 lambda 函数

当 lambda 函数不接收参数时,可以省略圆括号。

now = -> { Time.now.year }
puts "Year: #{now.call}"

多行 lambda 函数

lambda 函数可以跨越多行。最后一个表达式就是返回值。

classify = ->(n) {
  return "zero" if n.zero?
  n.positive? ? "positive" : "negative"
}
puts classify.call(0)
puts classify.call(-3)

将 lambda 函数传递给方法

和 Proc 对象一样,lambda 函数可以通过 & 转换为代码块,因此可以用于 map、select 等方法。

doubler = ->(n) { n * 2 }
p [1, 2, 3].map(&doubler)

将 lambda 函数作为返回值

方法可以构建并返回一个 lambda 函数,让您能够即时创建专用函数。

def multiplier(by)
  ->(n) { n * by }
end
times10 = multiplier(10)
puts times10.call(5)

整合运用

lambda 函数是严格遵循方法行为的 Proc 对象:

  • 使用 lambda { } 或 ->(args) { } 编写。
  • 它们会强制检查参数数量,并让 return 保持在局部作用域内。
  • 当正确性很重要,或您需要构建并返回函数时,请使用它们。
is_even = ->(n) { n.even? }
p [1, 2, 3, 4, 5, 6].select(&is_even)

快速检查

测试您对 lambda 函数的理解。

回顾

您学习了 lambda 函数:

  • lambda 函数是严格的 Proc 对象,可使用 -> 编写。
  • 它会强制检查参数数量。
  • return 只会退出 lambda 函数。
  • lambda? 可以将它与普通 Proc 对象区分开。
area = ->(w, h) { w * h }
puts area.call(3, 4)

常见问题解答

「Lambdas」课时是免费的吗?

是的 — 「Lambdas」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Ruby Academy 课程的其余内容,请升级到 CoddyKit PRO。 Ruby Academy 课程共包含 4 节课。

「Lambdas」这节课中我会学到什么?

严格参数数量的过程对象 你通过在浏览器中直接运行的动手代码来练习 Ruby Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Ruby Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Ruby Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「Lambdas」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Ruby Academy 课中编写并运行代码吗?

能。每节 Ruby Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 代码块回顾
  2. Procs
  3. Lambdas
  4. 闭包与作用域
← 返回 Ruby Academy