2011-08-17 2 views
2

예를 들어, 메소드를 정의했습니다.어떤 언어가 정의 된 매개 변수 이름을 가져오고 매개 변수 이름을 전달할 수 있습니까?

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, 변수 이름!

자바/그루비/스칼라가 그렇게 할 수 없기 때문에 이것이 어렵다는 것을 알고 있습니다. 그러나 이것은 매우 유용한 기능이라고 생각합니다 (특히 웹 프레임 워크 디자인의 경우). 언어가 그것을 할 수 있습니까?

+1

당신이 할 수있는 C#, 예를 들어 여기 좀 봐 : http://stackoverflow.com/questions/869610/c-resolving-a-parameter-name-at-runtime – openshac

+0

D는 컴파일해야한다고 시간 반영! 해당 문서 http://dlang.org/traits.html – nawfal

답변

4

인수가 명명 된 변수가 아니기 때문에 일반적으로에서 인수의 이름을 얻을 수 없다. 을 감안할 때이 :

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

, 당신이 전달 된 인수의 원시 AST에 액세스 할 수 있도록 일부 언어가 있다는 것을 감안할 때 : 여기 출력 것이 무엇

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

. Lisp, Io 및 Ioke의 매크로는 모두 평가되지 않은 코드 조각을 인수로 취하여 검사 할 수있는 함수를 정의하게합니다.

+0

맞아요, 나는 그런 생각을하지 못했습니다. – Freewind

3
  • 파이썬

inspect module 당신에게 함수의 인수의 이름과 기본값이 얻을 것이다 많은 기능 중 하나입니다.

inspect.getargspec(func) 
  • C#을

여기에 서로 좋은 예는 SO 자바 스크립트

익명 형식 및 반사 Resolving a parameter name at runtime

+0

을 참조 할 수 있지만 ** 전달 된 ** 변수 이름을 얻을 수 있습니까? 내 질문에 'user1'이 – Freewind

관련 문제