module Pigged
String.class_eval do
def pig
newstring = self + self[0]; newstring[0] = ""; newstring += "ay"
return newstring
end
end
end
这是相关的代码。我想做的是创建一个方法pig!
,来修改原始字符串。但是如何在不修改self的情况下实现呢?因为这是不允许的...
module Pigged
String.class_eval do
def pig
newstring = self + self[0]; newstring[0] = ""; newstring += "ay"
return newstring
end
end
end
这是相关的代码。我想做的是创建一个方法pig!
,来修改原始字符串。但是如何在不修改self的情况下实现呢?因为这是不允许的...
我稍微简化了你的代码,并添加了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#<<
为例。它修改现有的字符串,是Ruby编程中最常用的方法之一(仅次于puts
和+
等)。 - Linuxios对于字符串,您可以使用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
)的引用!
self.replace pig
来避免重复常见计算。 - dbenhur