什么语言可以让我们获取已定义的参数名称并传递参数名称?

时间:2011-08-17 09:21:01

标签: programming-languages parameters

例如,我定义了一个方法:

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框架设计)。有语言可以做到吗?

2 个答案:

答案 0 :(得分:4)

您无法获取参数的名称,因为参数可能不是命名变量。鉴于此:

def hello(String name) {
    println("Passed parameter name: " + getPassedName())
}

这里会输出什么:

hello("a literal")
hello("an " + "expression")

鉴于此,有一些语言可以让你访问传递参数的原始AST。 Lisp,Io和Ioke中的宏都允许您定义函数,这些函数将一大块未评估的代码作为参数,然后您可以检查它。

答案 1 :(得分:3)

  • 的Python

inspect module,其中一个函数会为您提供函数参数的名称和默认值。

inspect.getargspec(func)
  • C#

以下是使用匿名类型和反射Resolving a parameter name at runtime

的另一个SO问题的一个很好的例子
  • 的Javascript

这是使用RegEx在Javascript中执行此操作的方法(另一个SO问题,也提到了Python方式)Inspect the names/values of arguments in the definition/execution of a JavaScript function