2009-05-20 4 views
1

루비 블록에 전달 된 매개 변수의 이름에 액세스하는 방법이 있는지 아는 사람 있습니까?루비 블록 매개 변수 이름

예.

def do_something() 
    # method uses the names of the parameters passed to the block 
    # in addition to their values 
    # e.g. the strings "i" and "j" 
end 

do_something { |i, j| ... } 

필자가 작성한 DSL은 매우 유 별나게 유용한 사례이다. 이것은 parsetree와 같은 것으로 아마도 가능할 것입니다. 나는 더 쉽고/더 시원한 방법이 있는지 궁금해했습니다.

감사

+0

왜이 작업을 수행 하시겠습니까? – Chuck

+0

필자가 작성한 dsl에 대한 매개 변수 이름에 액세스해야합니다. – fturtle

+1

당신은 어떤 질문에 이것을 묻는 원인이되는지 예제를 제공 할 수 있습니까? 저는 블록 선언 구문을 취할 수없는 모양으로 구부리려고 노력하고 있을지도 모른다고 우려합니다 ... 가능하지는 않지만 다른 방법을 원할 수 있습니다. –

답변

6
이 실제로 가능하다

,하지만 1.9의 트렁크 버전 :

->(a,b,c) {}.parameters 

그것은 비록 공개되지 않으며 대부분의 아마 루비 1.9.2에 포함됩니다.

+0

네, 포스터가 알고 싶어하는 것 같습니다. Ruby 1.9는 인상 깊었습니다! – m104

+0

이것은 현재 트렁크에만있는 것입니다. 1.9.1에 나와 있지 않습니다. – Chuck

+0

좋아요. 모두 도움을 주셔서 감사합니다. 앞으로 그것을 시도 찾고. – fturtle

2

갱신 : 그것은 루비 1.9과 같은 당신이 요청하는 일을 할 수 있습니다. 플로리안의 대답을보십시오.

네, 루비는 명명 된 매개 변수를 전달하는 위대한 기능을 가지고 있습니다 : 해시. 그것이 어떻게 작동하는지

는 여기에 없습니다 :

def do_something(params) 
    params.each do |key, value| 
    puts "received parameter #{key} with value #{value}" 
    end 
end 

do_something(:i => 1, :j => 2) 

그렇지 않으면, 더 정말 루비에 전달 된 변수의 이름을 얻을 수있는 방법이 아니다. Ruby의 변수는 Object에 대한 참조 일 뿐이므로 메서드 호출에서 어떤 참조가 사용되었는지 알 수있는 방법이 없습니다.

관련 문제