再次在同一个类中初始化的类变量的值是多少?

时间:2015-10-14 13:14:49

标签: ruby class methods

此代码用*作为输入的咒骂单词替换元音*。现在当我使用" +"运算符,创建一个类实例并使用输入作为两个字符串再次初始化(" 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

1 个答案:

答案 0 :(得分:1)

原始实例中的@value未更改。您刚刚使用组合的@value创建了一个新实例。

实际上,在现有对象中没有任何改变@value的方法,因为没有类方法可以修改该实例变量。