You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中获取仅返回入参的lambda有没有快捷实现方式?

Ruby 恒等函数快捷实现方案

你要的仅返回传入参数的恒等lambda有现成的快捷写法,不需要手动写->(x) { x },也不需要调整Object#itself的接收方,直接用Symbol#to_proc即可实现:

直接可用的写法

把默认参数改成:itself.to_proc就可以完美匹配你的需求:

def some_method(x, y, decorator = :itself.to_proc)
  # 示例调用逻辑
  puts decorator.call("输入内容") # 输出:输入内容
end

原写法不可用的原因

你尝试的method(:itself)获取的是当前上下文self对象的itself方法,调用时会把你传入的参数当做itself的入参,而Object#itself本身不接收任何参数,调用时会抛出参数数量错误,不符合要求。

实现原理

Symbol#to_proc生成的Proc,会将调用时传入的第一个参数作为方法接收者,调用符号对应的方法。:itself.to_proc等价于->(arg) { arg.itself },而Object#itself的原生逻辑就是返回调用者本身,刚好符合你要的恒等函数效果。

多参数兼容场景

如果你需要支持传入任意数量的参数、返回全部入参,可以用更通用的写法:

def some_method(x, y, decorator = ->(*args) { args.size == 1 ? args.first : args })
  # 调用示例
  decorator.call(1,2,3) # 返回 [1,2,3]
  decorator.call("a") # 返回 "a"
end

内容的提问来源于stack exchange,提问作者schmijos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 11:12:04