Ruby - 打印变量名,然后是它的值 [英] Ruby - print the variable name and then its value
问题描述
编写允许我用 Ruby 编写此代码的函数(或类似 DSL 的东西)的最佳方法是什么?我将如何构造函数 write_pair?
What is the best way to write a function (or something DSLish) that will allow me to write this code in Ruby. How would I construct the function write_pair?
username = "tyndall"
write_pair username
# where write_pair username outputs
username: tyndall
可以吗?寻找最简单的方法来做到这一点.
Is it possible to do? Looking for the most simple way to do this.
推荐答案
当然有可能!
我的解决方案通过 Object#object_id 身份测试 var:http://codepad.org/V7TXRxmL
它在绑定传球风格中瘫痪了......
虽然它只适用于本地变量,但可以很容易地通用"添加其他范围变量列表方法,如 instance_variables
等.
My solution tests the var by Object#object_id identity: http://codepad.org/V7TXRxmL
It's crippled in the binding passing style ...
Although it works just for local vars yet, it can be easily be made "universal" adding use of the other scope-variable-listing methods like instance_variables
etc.
# the function must be defined in such a place
# ... so as to "catch" the binding of the vars ... cheesy
# otherwise we're kinda stuck with the extra param on the caller
@_binding = binding
def write_pair(p, b = @_binding)
eval("
local_variables.each do |v|
if eval(v.to_s + ".object_id") == " + p.object_id.to_s + "
puts v.to_s + ': ' + "" + p.to_s + ""
end
end
" , b)
end
# if the binding is an issue just do here:
# write_pair = lambda { |p| write_pair(p, binding) }
# just some test vars to make sure it works
username1 = "tyndall"
username = "tyndall"
username3 = "tyndall"
# the result:
write_pair(username)
# username: tyndall
这篇关于Ruby - 打印变量名,然后是它的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!