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!
,修改原始字符串。我该如何做,不修改自己,因为这是不允许的......?修改自己,红宝石
对于字符串,您可以使用self.replace来更改内容。
对于其他类,我不认为它可以修改自己,除非创建一个新的对象。
修改self
没有什么错,你不能分配给它,但是如果你有直接的访问权限,你可以使用accessor方法修改它或者修改实例变量。 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
)同一对象的所有引用!
我已经凝聚你的代码一点点,并添加了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
这个答案比较好:http://stackoverflow.com/a/10391724/199712 –