此代码用*作为输入的咒骂单词替换元音*。现在当我使用" +"运算符,创建一个类实例并使用输入作为两个字符串再次初始化(" t * mn"和" d * ck")。
我怀疑在这种情况下@value变量会发生什么?可以在" +"中调用新实例在原始类中替换@value的值?
class Bowlderize
def initialize(string)
@value = string.gsub(/[aeiou]/, "*")
end
def +(other)
Bowlderize.new(self.to_s + other.to_s)
end
def to_s
@value
end
end
mybow = Bowlderize.new("tamn ") + "duck"
puts mybow.to_s
第一编辑:
此代码返回" d * ck"。如果对同一个类的新调用无法更改@value,那么d * ck是如何返回的?
class Bowlderize
def initialize(string)
@value = string.gsub(/[aeiou]/, "*")
end
def +(other)
Bowlderize.new(other.to_s)
end
def to_s
@value
end
end
mybow = Bowlderize.new("tamn ") + "duck"
puts mybow.to_s
答案 0 :(得分:1)
原始实例中的@value未更改。您刚刚使用组合的@value创建了一个新实例。
实际上,在现有对象中没有任何改变@value的方法,因为没有类方法可以修改该实例变量。