我想知道是否有可能创建一个方法,比如Array#square
(将数组中的元素对齐),它允许一个可选的bang !
标识符?
这样,接收器是否被永久修改仅取决于该方法是否被激活。例如,可以定义一个方法:
class Array
def square(!)
#code
end
end
或者,是否有必要创建两个这样的方法?
class Array
def square
#code
end
def square!
#code
end
end
答案 0 :(得分:4)
通常单独定义两个方法,其中非危险版本在副本上调用bang方法:
class Array
def square
dup.square!
end
def square!
#code
end
end