Ruby:两个独立的类之间如何共享实例变量?

时间:2014-05-23 18:57:00

标签: ruby

前言,我是一个原始的Ruby新手,也是编码的新手,所以请原谅我的无知。我试图找出一个涉及两个类的假设练习,并在一个类的实例和另一个类之间传递变量。我一直在寻找答案,但似乎无法找到任何直接适用于此类情况的内容。

class Person
 def initialize(name, age)
     @name = name
     @age = age
     puts "Hi #{@name}, you are #{@age}."
 end
end

class Town
 def initialize(town_name)
     @town_name = town_name
     puts "Welcome to #{@town_name}!"
 end
 def buy_house(person)
     puts "#{@name}, at age #{@age}, you bought a house in #{@town_name}!"
 end
end

当我实例化Person和Town时,我可以看到设置的实例变量:

me = Person.new("Daniel", 38)
townville = Town.new("Townville")

我真正的问题是:如何传递为" me"的实例设置的变量?在城镇中定义的任何方法使用类似下面的行?

townville.buy_house(me)

2 个答案:

答案 0 :(得分:4)

您无法在puts "#{@name}..."的实例中使用Town来引用Person的{​​{1}}实例变量。 @name始终引用属于当前对象的变量。如果要访问@variable的实例变量,则需要为它们创建访问器。

您可以通过明确定义Person上对实例变量进行操作的方法,或者使用Person / attr_reader / attr_writer来实现此目的:< / p>

attr_accessor

答案 1 :(得分:1)

如果要将一个对象的所有实例变量“注入”到另一个对象,这是绝对可能的。这是否有用取决于你自己决定:

class Object
  def inject_instance_variables(other)
    other.instance_variables.each do |var|
      self.instance_variable_set(var, other.instance_variable_get(var))
    end
  end
end