例如,我定义了一个方法:
def hello(String name) {
println("Hello " + name)
}
我想在运行时使用参数名称:
def hello(String name) {
println("The name of the parameter of this method is: " + getParamName())
// getParamName() will be `name` here
}
而且,我希望获得参数的传递名称:
def hello(String name) {
println("Passed parameter name: " + getPassedName())
}
String user1 = "someone"
hello(user1)
它将打印:
Passed parameter name: user1
注意,这里是 user1 ,变量名称!
我知道这很难,因为java / groovy / scala不能这样做。但我认为这是一个非常有用的功能(特别是对于Web框架设计)。有语言可以做到吗?
答案 0 :(得分:4)
您无法获取参数的名称,因为参数可能不是命名变量。鉴于此:
def hello(String name) {
println("Passed parameter name: " + getPassedName())
}
这里会输出什么:
hello("a literal")
hello("an " + "expression")
鉴于此,有一些语言可以让你访问传递参数的原始AST。 Lisp,Io和Ioke中的宏都允许您定义函数,这些函数将一大块未评估的代码作为参数,然后您可以检查它。
答案 1 :(得分:3)
有inspect module,其中一个函数会为您提供函数参数的名称和默认值。
inspect.getargspec(func)
以下是使用匿名类型和反射Resolving a parameter name at runtime
的另一个SO问题的一个很好的例子这是使用RegEx在Javascript中执行此操作的方法(另一个SO问题,也提到了Python方式)Inspect the names/values of arguments in the definition/execution of a JavaScript function