可以自己定义带!的方法么

可以自己定义带!的方法么

既是修改方法调用者的方法。
如String#chomp!或者Array#sort!
直接修改self会报错

可别告诉我在方法名后面加!就行了.......
确实是方法名后面加!就行了。 !不过是个友好的记号。

如果你的问题其实是怎么绕过‘Can't change the value of self‘。这个我确实不知道怎么在纯ruby里做(除了用其他现成的destructive method)。

Array#sort!可以这样实现:

class Array
 def sort!
  sorted_copy = self.sort
  self.clear
  sorted_copy.each {|e| self << e}
 end
end

a=[4,3,2]
p a.sort!
p a
我的问题确实是绕过‘Can't change the value of self‘

数组和hash可以用实例方法replace.
但是其他对象不知道怎么办。
class A
def initialize(x)
@x=x
end
def change!
 @x=1
end
end

a=A.new
a.change!

这能算是修改了调用者嘛?
如果用某个实例变量表示这个对象的内容话.....可以算吧
不能算
那change方法呢?
where?