module Pigged
String.class_eval do
def pig
newstring = self + self[0]; newstring[0] = ""; newstring += "ay"
return newstring
end
end
end
是相关代码。我想要做的是创建一个修改原始字符串的方法pig!
。如何在不修改自我的情况下这样做,因为这是不允许的......?
答案 0 :(得分:15)
我已经缩小了您的代码并添加了pig!
方法:
module Pigged
String.class_eval do
def pig
self[1..-1] + self[0] + 'ay'
end
def pig!
self.replace(pig) #self.replace(self[1..-1] + self[0] + 'ay')
end
end
end
答案 1 :(得分:4)
答案 2 :(得分:4)
对于String,您可以使用self.replace更改内容。
对于其他类,除非创建新对象,否则我认为它不能自行修改。
答案 3 :(得分:2)
修改self
没有任何问题,您无法分配它,但是如果您可以直接访问它们,则可以使用访问器方法对其进行修改或修改实例变量。在这种特殊情况下,String#replace
是一个访问者。
另一个例子:
class Array
def delete_first_element!
self[0..0] = []
end
end
a = [1,2,3]
b = a
a.delete_first_element!
puts a.inspect # [2,3]
puts b.inspect # [2,3]!
要记住一件事 - 你改变了同一个对象的所有引用(在我的例子中为b
)!