На каком языке можно получить определенное имя параметра и переданное имя параметра? - PullRequest
2 голосов
/ 17 августа 2011

Например, я определил метод:

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 не может этого сделать. Но я думаю, что это очень полезная функция (особенно для дизайна веб-фреймворка). Есть ли язык, который может это сделать?

Ответы [ 2 ]

4 голосов
/ 18 августа 2011

Вы не можете получить имя аргумента в общем случае , поскольку аргумент не может быть именованной переменной. Учитывая это:

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

Что бы вывести здесь:

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

Учитывая это, есть некоторые языки, которые позволяют вам получить доступ к необработанному AST переданного аргумента. Все макросы в Lisp, Io и Ioke позволяют вам определять функции, которые в качестве аргумента будут принимать кусок неоцененного кода, который затем можно будет проверить.

3 голосов
/ 17 августа 2011
  • Python

Существует модуль проверки , и одна из множества функций выдаст вам имя и значение по умолчанию аргументов функции.

inspect.getargspec(func)
  • C #

Вот хороший пример из другого вопроса SO с использованием анонимных типов и отражения Разрешение имени параметра во время выполнения

  • Javascript

И вот способ сделать это в Javascript с использованием RegEx (еще один вопрос SO, в котором также упоминается путь Python) Проверка имен / значений аргументов в определении / выполнении функции JavaScript

...