gpt4 book ai didi

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

转载 作者:数据小太阳 更新时间:2023-10-29 08:27:17 28 4
gpt4 key购买 nike

作为序言,我是一个 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")

我真正的问题是:如何使用类似下面的行将为“我”的实例设置的变量集传递到 Town 中定义的任何方法中?

townville.buy_house(me)

最佳答案

您不能在 Town 的实例中使用 puts "#{@name}..." 来引用 Person@name 实例变量。 @variable 总是引用属于当前对象的变量。如果你想访问 Person 的实例变量,你需要为它们创建访问器。

您可以通过在 Person 上显式定义对实例变量进行操作的方法,或使用 attr_reader/attr_writer/ 来实现attr_accessor 为你做的:

class Person
attr_reader :name, :age

# the above line is equivalent to defining two methods:
# def name; @name; end
# def age; @age; end

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

# class Town ...

def buy_house(person)
puts "#{person.name}, at age #{person.age}, you bought a house in #{@town_name}!"
end

关于Ruby:实例变量如何在两个独立的类之间共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23836598/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com