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
相关产品推荐
相关产品推荐

