module Pigged
String.class_eval do
def pig
newstring = self + self[0]; newstring[0] = ""; newstring += "ay"
return newstring
end
end
end
是相关代码。我想做的是制作一个pig!
修改原始字符串的方法。我该怎么做,而不修改自我,因为那是不允许的......?
module Pigged
String.class_eval do
def pig
newstring = self + self[0]; newstring[0] = ""; newstring += "ay"
return newstring
end
end
end
是相关代码。我想做的是制作一个pig!
修改原始字符串的方法。我该怎么做,而不修改自我,因为那是不允许的......?
我已经压缩了你的代码并添加了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
对于 String,您可以使用 self.replace 来更改内容。
对于其他类,我不认为它可以修改自己,除非创建一个新对象。
修改没有错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
在我的例子中)!