2013-11-10 3 views
1

함수 호출에 비해 $ 1, $ ~ 등의 값을 유지하는 방법이 궁금합니다. 나는 정규 표현식을 인자로 받아들이는 몇가지 함수를 작성하고 있는데, 함수가 호출 된 후에 이것들을 사용할 수 있다면 유용 할 것이다. (나는 MatchData를 다른 리턴 값과 함께 전달할 수 있다고 생각한다. 그러나이 방법은 루비 방법 ...). 나를 위해루비 - 함수 호출에 대한 정규식 전역 보존

def foo() 
    "abc123" =~ /(\d+)/ 
    puts "I see $1: #{$1}" 
end 

foo() 
puts "I see $1: #{$1}" 

이 출력합니다, :

다음은이 문제를 보여줍니다 간단한 스크립트입니다 여담으로

I see $1: 123 
I see $1: 

변수 이러한 유형의 몇 가지 정식 이름이? 그냥 "정규식 전역"이라고 부르면 Google에서 검색하기가 어렵습니다.

+2

루비가 아닙니다. 그것은 perl 방식입니다. 그것도하려고하지 마십시오. 전역 변수에 상태를 전달하는 것은 좋지 않습니다. :) –

+0

BTW : http://stackoverflow.com/a/3747135/125816 –

답변

0

내가 당신이라면 전역 변수에 저장하는 대신 메서드에서 $1을 반환 할 것입니다.

def foo() 
    "abc123" =~ /(\d+)/ 
    $1 
end 

puts "blah is #{foo}" 
+0

나는 당신의 추론을 볼 수 있지만, $ 1, $ 2 등을 사용하는 것은 루비 방식에 더 가깝다. 사용자가 다른 정규 표현식과 마찬가지로 $ 1, $ 2를 사용할 수있게되면 더 투명하게됩니다. 본질적으로, 필자가 작성한 함수는 논리적으로'= ~'를 사용하는 것과 비슷하지만, 다른 곳에서 데이터를 얻는다. 그래서 그런 식으로'= ~'처럼 행동하게 만든다. –