2013-11-10 67 views
1

我想知道如何通過函數調用來保留$ 1,$〜等的值。我正在寫一些接受正則表達式作爲參數的函數,並且在函數被調用後讓這些函數可用是很有用的(我想我可以將MatchData與其他返回值一起傳遞出去,但是這種方式看起來更像Ruby的方式...)。Ruby-通過函數調用保存正則表達式全局變量

以下是一個演示問題的一個簡短的腳本:

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

順便說一句:http://stackoverflow.com/a/3747135/125816 –

回答

0

如果我是你,我會從該方法返回$1而不是將它們存儲在全局變量中。

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

puts "blah is #{foo}" 
+0

我可以看到你的推理,但使用$ 1,$ 2等適合更緊密的Ruby方式;如果用戶可以像使用任何其他正則表達式一樣使用$ 1,$ 2,它會使它更加透明。實質上,我寫的函數在邏輯上就像使用'=〜',但是我只是從其他地方獲取數據,所以這樣做就像'=〜'那樣有意義。 –