Ruby自我执行

时间:2012-12-26 21:31:07

标签: ruby

是否可以缩短它?

string = string.split

Ruby有一些!函数可以做到这一点,但是这个怎么样?

我想要的东西像string.split!但是不要添加额外的String类方法

2 个答案:

答案 0 :(得分:4)

您必须为self类编写一个方法,该方法或多或少地完成了您的代码行。

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

问题是您要更改keywords的内容(从String更改为Array),因此您必须编写与keywords交互的所有其他方法所以无论是String还是Array,它们都会有效。

split!没有String方法的原因是因为它会涉及在中间方法中将变量从一个类更改为另一个类。

# 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能够像String一样行事和Array毫无后顾之忧。

答案 1 :(得分:1)

只需使用"key words".split即可获得数组["key", "words"] 在一个类中使用,因为你的自我建议使它像

keywords = "key words"

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

顺便说一下,你知道"[%s]" % keywords会产生相同的结果吗?