2011-09-29 4 views
3

을 감안할 때 :는 평가/constantize 방법에 문자열, 다음에 인수를 전달하는 방법을

s = "foo_bar_path" 

은 어떻게 평가 후면 또는 constantize들과 같은 것이 나의 최종 결과,에 인수를 전달할 수 있습니다 다음과 같음 :

foo_bar_path(@myvar, @foobar) 

나는 eval(s).send을 시도했지만 작동하지 않는 것 같습니다. 그리고 constantize는 Classes에서만 작동하는 것 같습니다. 당신이 자신에 메서드를 호출 할 경우

some_object.send(s, @myvar, @foobar) 

나 :

답변

10

당신은 단지 해당 개체의 send method을 사용은

self.send(s, @myvar, @foobar) 

문서 말한다 "기호"하지만 send 그냥 문자열에서 메서드 이름을 얻는 것이 행복합니다.

+0

은 내가 뭘하려고 오전의 또 다른 예입니다 : 주어진 S = "풋"내가 원하는 'methodize'할 수 있어야하고 인수를 전달하면 eval (s) "hello world"와 같은 기능이 "hello world"와 동일한 출력을 생성합니다. 즉, puts "hello world"라는 식을 실행합니다. – Geremy

+0

@ user970193 : 아마도 현재의 객체이므로 아마도'send (s, @mybar, @foobar)'입니다. 여기서 우리는 약간의 문맥이 있습니다. –

+0

s = "넣기"; send (s, "hello world")는 내가 원하는 것을 정확하게 수행한다! 감사합니다 뮤! – Geremy

2

일 (OpenStruct에 더) 이런 종류의 이런 종류의 가야하는 또 다른 방법 : 여기

#for more in this domain, see the Ruby core API for the Object class 
class Demo 
    def initialize(n) 
    @iv = n 
    end 
    def hello() 
    "Hello, @iv = #{@iv}" 
    end 
end 

k = Demo.new(99) 
m = k.method(:hello) 
m.call #=> "Hello, @iv = 99" 
관련 문제