-3

有没有可能让这个更短?

string = string.split

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

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

4

2 回答 2

4

您必须为您的self类编写一个方法,该方法或多或少与您的代码行所做的完全相同。

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

这样做的问题是您正在更改什么keywords(从 aString到 an Array),因此您必须编写与之交互的所有其他方法,keywords以便它们无论是 aString还是 an都可以工作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能够像 aString和 an一样Array无后顾之忧。

于 2012-12-26T21:47:20.490 回答
1

只是 using"key words".split会给你["key", "words"] 在一个类中使用的数组,就像你自己建议的那样

keywords = "key words"

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

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

于 2012-12-26T22:02:59.560 回答