函数: func add(_ a: Int) -> (Int) -> Int {{ a + $0 } } 中 _ 是什么含义

在 Swift 函数声明中,参数前的下划线 _ 是一个参数标签占位符,它的含义是:

1. 省略外部参数标签

当你在函数参数前使用 _ 时,它表示调用该函数时不需要写参数标签
对比以下两种写法:

// 有下划线 _ 的版本 → 调用时直接传值,不需要标签
func add(_ a: Int) -> (Int) -> Int { ... }
add(5)  // ✅ 正确调用:不需要写标签

// 没有下划线 _ 的版本 → 调用时必须写参数标签
func add(a: Int) -> (Int) -> Int { ... }
add(a: 5)  // ❌ 必须写标签,直接写 add(5) 会报错

2. 设计意图

  • 简化调用语法:让函数调用更简洁(尤其是数学运算这类直观操作)
  • 遵循语言习惯:Swift 标准库中运算符类函数(如 max(5, 8))都采用这种设计
  • 逻辑清晰:当参数含义在函数名中已明确时(如 add 明显需要加数),无需重复标签

3. 内部使用不受影响

在函数内部,你仍然需要使用参数名a 访问值:

{ a + $0 }  // ✅ 内部用 a 访问参数
{ _ + $0 }  // ❌ 错误!这里 _ 表示忽略参数,会编译失败

类比其他场景

参数声明方式调用示例说明
func add(_ a: Int)add(5)✅ 推荐:简洁的数学函数风格
func add(a: Int)add(a: 5)⚠️ 语义正确但冗余
func add(number a: Int)add(number: 5)✅ 适合需要明确语义的场景

为什么这个函数需要它?

在柯里化函数 add(_:) -> (Int) -> Int 中:

  1. 首次调用 add(5) 固定第一个加数
  2. 返回的函数 (Int) -> Int 天然没有参数标签(Swift 对闭包参数默认不生成标签)

使用 _ 保证了整个调用链的简洁性:

add(5)(3)  // ✅ 干净利落 → 8
// 而不是
add(a:5)(3) // ❌ 首尾风格不一致
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

瓜子三百克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值