前言,我是一个原始的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)
答案 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