2012-12-26 210 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 –