Ruby 将对象从一个类传递到另一个类
下面是有效的代码,但我希望它尽可能干净,以获得输出而不必构建散列Ruby 将对象从一个类传递到另一个类,ruby,Ruby,下面是有效的代码,但我希望它尽可能干净,以获得输出而不必构建散列 class Person attr_accessor :name, :age def initialize(name, age) @name = name @age = age end def create Report.create({name: @name, age: @age}) end end class Report < Person def se
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def create
Report.create({name: @name, age: @age})
end
end
class Report < Person
def self.create(attributes)
puts "Hello, this is my report. I am #{attributes[:name]} and my age is #{attributes[:age]}."
end
end
me = Person.new("Andy", 34)
me.create # Hello, this is my report. I am Andy and my age is 34.
及
但是输出是“我是名字,我的年龄是年龄。”你可以通过这个人,类似这样:
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def report
Report.new(self)
end
end
class Report
attr_accessor :person
def initialize(person)
@person = person
end
def to_s
"Hello, this is my report. I am #{person.name} and my age is #{person.age}."
end
end
me = Person.new("Andy", 34)
puts me.report
# Hello, this is my report. I am Andy and my age is 34.
请注意,我更改了一些详细信息:
不从报告
人员继承
实例通过Report
new
现在是Person#create
Person#report
对输出使用Report
(由to_s
调用)put
类报告
——继承看起来很奇怪。一份报告
是一种特殊的人
吗?名字并不重要,我只是在玩弄代码,看看我是否能让它工作。@Andy{:name}
将始终按名字计算。插值#{…}
计算内部的表达式,对其应用to_s
方法,并使用结果字符串。在您的例子中,内部表达式是:name
,它属于Symbol
类。将to_
应用于符号始终会返回符号的字符串表示形式,即示例中的name
。
def self.create(attributes)
puts "Hello, this is my report. I am #{:name} and my age is #{:age}."
end
class Person
attr_accessor :name, :age
def initialize(name, age)
@name = name
@age = age
end
def report
Report.new(self)
end
end
class Report
attr_accessor :person
def initialize(person)
@person = person
end
def to_s
"Hello, this is my report. I am #{person.name} and my age is #{person.age}."
end
end
me = Person.new("Andy", 34)
puts me.report
# Hello, this is my report. I am Andy and my age is 34.