我希望能够运行lambda并获得它的参数值(下面的值为a
和b
).
我可以通过显式地让lambda返回binding
,然后从这个绑定中获取值来实现这一点:
fun = lambda { |a, b = Time.now| binding }
fun_binding = fun.call(123)
puts "A is #{fun_binding.local_variable_get(:a)} and B is #{fun_binding.local_variable_get(:b)}"
# Outputs e.g.: A is 123 and B is 2022-04-29 20:14:07 +0200
不在lambda体中运行任何代码就可以获得这些值吗?我能做什么
fun = lambda { |a, b = Time.now| }
fun.call(123)
还是从lambda之外得到a
和b
的值?
(为了提供上下文——我这么问是因为我已经把它作为一种快捷语法,用于实例化自动分配了IVAR/读卡器的对象.在这个阶段,我更好奇什么是可能的,而不是什么是可取的——所以我邀请任何解决方案,无论是可取的还是不可取的……)