在Ruby中,我们有像string.upcase这样的方法,它返回一个新字符串和string.upcase!它修改了调用它的字符串。
我想知道如何写自己的!方法的版本。
我正在编写一个搜索两个字符之间的字符串的方法。我希望它将字符串修改为等于新字符串。
如何实现这一目标。 (我有找到新字符串的方法只需要知道如何修改调用者)
ANSWER
class String
def find_between(marker_one , marker_two)
self[/#{Regexp.escape(marker_one)}(.*?)# {Regexp.escape(marker_two)}/m, 1]
end
def find_between!(marker_one , marker_two)
self.replace(find_between(marker_one, marker_two))
end
end
最终,self.replace就是所需要的
答案 0 :(得分:4)
就像普通方法一样:
def mathod_name!
# whatever
end
但是,惯例是,只有当你的“普通”版本的方法具有相同的名称时才应该添加一个bang替代品,这个版本在某种程度上更加“危险”< / em>的
您可以使用String#[]=
修改字符串。
答案 1 :(得分:3)
这篇文章仅供参考,我强烈建议不要将它用于实际项目,除非你100%确定它可能会导致什么。
如果您想修改String
类以添加新实例方法,请使用此
class String
def cut!(start_pos, end_pos)
# your magic
self.replace(YOUR_NEW_STRING)
end
end
然后你就可以像这样打电话了
x = "aaaabbbb"
x.cut! 1,4
puts x
=> "aaaa"
修改全局对象被认为是一种不好的做法(又名&#34;猴子修补&#34;)。但如果有人需要使用它,那么至少要使用refinements。到目前为止,这是我唯一有效的用例。