2012-12-26 158 views
-2

是否有可能使這個更短?紅寶石自己執行

string = string.split 

Ruby有一些!功能,使這一點,但這個怎麼樣?

我想要的東西像string.split!但不添加額外的字符串類方法

+0

什麼是自我? – knut

+1

你想要多短?像a = b? – texasbruce

+0

我希望它像+ = 1 –

回答

4

你將不得不爲你的self類寫一個方法,它或多或少地完成你的代碼行。

def split_keywords!(sep = ' ') 
    @keywords = @keywords.split(sep) 
end 

的問題,這是您要更改keywords是什麼(從StringArray),所以你必須編寫與keywords交互的所有其他方法,使他們將工作無論是StringArray

究其原因,爲String沒有split!方法,因爲它會涉及從一個類改變變量到另一個法中旬。

# This will raise a SyntaxError 
class String 
    def split!(sep = ' ') 
     self = self.split(sep) # Causes self to become an Array mid-method 
    end 
end 

因此,要回答你的問題,沒有,沒有對你想要做什麼,但我會建議重新考慮你的方法,除非keywords能夠像一個快捷方式既是StringArray與別擔心。

+0

omfg ...我不要求創建新方法。無論CLASS是什麼,都無關緊要,關鍵字實例無關緊要! –

+0

我要求一個較短的結構,像一個+ = 1縮短到a = a + 1 –

+0

我理解你的問題和@peter,並且我已經盡最大努力做到了這樣一個短暫而無懈可擊的問題。但是,我在回答中告訴你的是,你想要的是不可能的。當涉及到一個結尾有爆炸方法的較短的構造時,比如'split!',如果bang方法將類從「String」變爲「Array」,那麼就沒有一個方法,這是一個什麼「分裂!」會做,而這就是爲什麼沒有。 –

1

只是用"key words".split會給你的陣列["key", "words"] 用於一類爲你的自我暗示使它像

keywords = "key words" 

class String 
    def [email protected] 
    self.split 
    end 
end 
p -keywords #=> ["key", "words"] 

順便說一下,你知道"[%s]" % keywords產生相同的結果?

+0

我不想創造新的方法! omg –

+0

請不要粗魯,我們儘量幫忙,看看我答案的第一部分,不能更短,下次更清楚,在你唯一的代碼行中使用self表明你使用類方法工作 – peter

+0

對不起那個男人:)其實這是rails activerecord類的一部分。因此,任何方式都是有害的,請將其作爲keywords = keywords.split進行閱讀。所以我已經要求內置方法或結構像+ = 1 ...哦...像keywords = keywords.uniq可能像keywords.uniq!實現,你知道。所以我問,實際上ruby的構建像+ =但類方法?因爲!方法不是每個。 Thx –