2014-01-10 63 views
3

如果a = 'foo'我可以做a << 'bar'並找回foobar但是說我要刪除bar在Ruby中追加什麼是相反的? <<

我知道我可以做a.slice!(3..a.length) - 但該死的是醜陋的。

讓我們regex這個愚蠢的混蛋,如:a.gsub!('bar','') - 但就是這個最好方法?


爲什麼我就不能做到這一點?:a >> 'bar' - 這將是超級騙子!


那麼你們怎麼做呢?什麼是最快的方法?

回答

4

爲什麼我不能這樣做?:a >>'bar' - 這會超級不爽!

因爲它更清晰地使用[]

a = 'foobar' 
a['bar'] = '' 
a # 'foo' 

如果你只需要bar末匹配,使用正則表達式:

a = 'barfoobar' 
a[/bar$/] = '' 
a # 'barfoo' 

a >> 'bar'不會是「超級騙子」,這將是完全不明確。 a >> b是什麼意思?你是否彈出一個字符並將其存儲在b中,或者將b的值從a的末尾跳出,或將雙方都轉換爲整數和位移? <<表示移動,右邊的字符向左移動。 >>會向我建議角色正在從左向右移動,而不是我想從左側移除和丟棄角色。

a << 'foo'的工作原因是因爲追加到字符串是軟件中最常見的事情之一。

+0

這是在文檔中的位置?這看起來很簡單!你的桌子上有釘書釘按鈕嗎?請現在按下它。仍然'a''bar'] ='''有點醜。 – fyz

+0

如果我想用正則表達式去掉'bar'的所有實例呢?那看起來怎麼樣? – fyz

+0

你會使用'gsub'。而「有點醜」是非常主觀的。我認爲'一個''酒吧'**醜陋**,沒有語言會永遠做你的建議。 – meagar

0

「append」或「push」的反義詞通常稱爲「pop」。這些名字來自一個堆棧(數據結構)的術語,是可用與數組:

ary = ?f, ?o, ?o 
suffix = ?b, ?a, ?r 
suffix.each &ary.method(:push) 
ary #=> ["f", "o", "o", "b", "a", "r"] 
ary.pop 3 #=> ["b", "a", "r"] 

要使用推,並與琴絃彈出,你必須首先arrayify他們:

str = 'foobar' 
# arrayification 
ary = str.each_char.to_a 
ary.pop(3).join #=> "bar" 
str = ary.join #=> foo 
0

會變成這樣不是在這種情況下工作,並沒有比gsub更乾淨?:

a = 'foobar' 
a.delete!('bar') 
=> "foo" 

a = 'foobarfoobarfoobarfoobar' 
a.delete!('bar') 
=> "foofoofoofoo"