Ruby 请教一个问题, 如何将 `方法参数的输入' 反射到方法内?

zw963 · 2012年11月01日 · 最后由 zw963 回复于 2012年11月01日 · 2619 次阅读

问一个怪问题..

例如:一个方法叫做 meth, 接受一个参数。

meth (2*2-10).abs
# 我希望将方法调用时手动输入的内容, 转化为字符串原样输出
# => "(2*2-10).abs"

我也不知道该如何形容,其实就是传入的表达式不去求值,原样传进来,然后在方法内部,我自己通过 eval 求值。其实我的需求是对经典的 p 包装一下,让输出结果是彩色的,而且有分割线,当然,也要传入原来 初始的表达式, 用来区分。

当然,这个需求可以直接使用 snippet 自动生成一大坨代码。看起来太乱了...

反正就这个需求,是不是用方法之外其他方式可以实现?

这个有可能么?坐等大神

传进方法时早就执行过了。。坐等神

只能想到你传一个字符串进去 然后 eval

#3 楼 @fresh_fish

那就只能通过 meth "expression" 的方式来输入了吧。我希望通过 正常使用 p 的那种方式。

def fun arg
  puts arg
  eval arg
end

fun "4"
4
=> 4

fun "self"
self
=> main

#5 楼 @davidqhr

谢谢,看来也只能用这个办法了。正好验证了我的怀疑,我觉得不他可能,所以问一下. #2 楼 @jjym #3 楼 @fresh_fish 也谢谢两位回复。

#7 楼 @cxh116

Cool ! 这正是我想要的。

没有 macro 系统的 applicative order 的语言做这个基本不可能吧。

#7 楼 @cxh116

好像不是一回事儿,你给的那个是可以分析一个方法或 Proc 的定义,而不是传入的参数。呵呵。 #9 楼 @pongyo 应该实现不了,哈哈。

看调用堆栈,直接把调用此方法的那个代码文件读取出来,然后后找到行不难吧,然后。。。 不用说了吧,哈哈

已经通过字符串的方式实现了,非常 Cool.

在文件内,我如果想 debug 任意一段代码,我只要用选区选择这段代码,然后按下快捷键,会补全我写的那个方法,然后执行,可以漂亮的输出需要 debug 的变量。

美中不足的是:方法需要额外提供一个 binding 参数,挺累赘...

#11 楼 @xjz19901211

这个想法也不错呀。

不过不太好匹配呀。容易出错,毕竟不仅仅是一个变量,有时候会混杂在实现代码当中。而且,有时候用 p 的写法也不一致,同时 p 多个参数也是问题。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号