2013-05-05 1 views
-1
puts "Hi" 
=> "Hi" 

내가 같은 말을 할 수 있도록이 코드에서 수익을 얻을 수있는 방법이 있나요. 나는 %x()에서 수익을 얻기에 특히 관심이 있지만, 사용자 정의 함수는 깔끔한 작은이 tap을 사용하는 것입니다 작성하지 않으려면 동일한 개념이 putsputs를 return하는 방법은 무엇입니까?</p> <pre><code>x = puts "Hi" </code></pre> <p>풋의 결과는 전무하다 :

+0

그래서'puts' 또는'% x (...)'의 반환을 원하십니까? 'puts'에서 무언가를 얻는 것에 대한 요점은 보이지 않으며,'% x (...)'는 명령의 결과를 반환합니다. 정확히 무엇을하고 싶니? –

+0

실제 반환 값이 nil이므로 화면에 출력되는 내용을 변수에 캡처하는 방법을 찾으려고합니다. –

+0

당신은'x = (expression)'과'puts x'를 할 수있는 것처럼 들립니다. – zneak

답변

2

간단한 솔루션에 적용 likek 보인다 내장 된 방법은

class Object 
    def tap 
     yield self 
     self 
    end 
end 

로 정의하고 상대하고 정확하게 인 작업을 새로 만든 객체를 수행하기에 특히 유용합니다. 여기이 많은 작업을 수행해야 할 때 당신은 조용히 객체를 인쇄하는 페이지의 ""내가 전화처럼 사소한 작은 사용자 정의 메소드를 사용하여이 경우

x = "Hi".tap {|obj| puts obj} 

에서 사용 거라고 방법

class Object 
    def see 
     puts self 
     self 
    end 
end 

x = "Hi".see 

EDIT 결과 : %x의 내 스케치 지식을 바탕으로, 나는 당신이 원하는 것은 시스템 명령의 소스를 얻을 하나 개의 행동을 실행하는 것입니다 생각합니다. 이 경우 문자열로 표현해야합니다 :

x = "destroy -device printer -reason rage".tap {|cmnd| %x{#{cmnd}}} # actually destroys printer 
puts x # outputs "destroy -device printer -reason rage" 
+0

x %()를 염두에두고 답을 다시 구사할 수 있습니까? 나는 그것을 OP에서 언급 했어야했다. "Hi"는 이미 "Hi"이지만 x % (python \ - \ - version)은 nil을 반환하므로 x를 nil로 만들면 –

+2

'% x (...)'는 ** 표준 출력 **을 반환합니다. 문자열로서의 명령. 불행히도,'$ python --version'은 stderr에 글을 씁니다. 그러므로'% x (python --version)'은 빈 문자열 ('nil'이 아닌)을 반환합니다. '% x (python --version 2> & 1)을 시도하십시오''2> & 1'는 단순히 stderr를 stdout으로 리다이렉트합니다. –

+0

개체를 표시 할 때 'puts'대신 'p'를 사용하여 개체를 표시 할 수 있습니다 (예 : 주위에 따옴표가있는 문자열). – vgoff

1

을 단순히 할 거라고 :

p x="hi" 

당신은, 디버깅을 제거 두 문자를 제거하려면

.

+0

네, 저의 추천입니다. – vgoff

관련 문제