4

我想通过提供shuffleshuffle!方法来猴子补丁 Ruby 的 String 类。

class String
  def shuffle
    self.split('').shuffle.join
  end
end

它返回一个新字符串。如何编写shuffle!修改字符串而不是返回副本的方法?


我试图自己弄清楚,但 String 的源代码在 MRI 中是 C 语言。

4

1 回答 1

9

您不能分配给self,这可能是首先想到的。但是,有一个方便的方法String#replace,您知道,它可以替换字符串的内容。

class String
  def shuffle
    split('').shuffle.join
  end

  def shuffle!
    replace shuffle
  end
end

s = 'hello'
s.shuffle!
s # => "lhleo"
于 2013-03-22T16:31:08.557 回答