0

我遇到很多情况,我正在使用方法修改变量并将其设置为修改后的值,例如..

value = "string"
value.modify #=> "new string"
value #=> "string"
value = value.modify
value #=> "new string"

我注意到许多 Ruby 方法都有一个value.modify!变体可以做到这一点。

Ruby 中是否有用于 do 的简写value = value.modify?另外,如果我要制作自己的modify!方法,我将如何实施它?

4

1 回答 1

2

这实际上取决于类的实现方式。这些 bang 方法在 Symbols 或 Fixnums 等不可变对象上实际上是不可能的。对于像 Arrays 这样的 Enumerables,有一种replace()方法可以让您编写任何 bang-method,如下所示:

def bang()
  replace(this.non_bang)
end

如果您查看许多 bang 方法的来源,您会发现通常 bang 方法包含代码的核心,而非 bang 方法只是简单地在对象上调用dup()orclone()然后调用 bang 版本的方法,如下所示:

def non_bang(*args)
  clone.bang(*args)
end
于 2012-07-07T23:42:17.560 回答