我是面向对象编程/建模的新手,我一直在使用Ruby来编写一些平面图算法。我想做的是这样的事情:
class Twin
def initialize(name1,name2)
## creates two twin brothers and "returns" one of them
end
def name
@name
end
def brother
@brother
end
end
我发现没有办法在一次初始化中创建两个双胞胎,除非重复出现如下:
def initialize(name1,name2)
if @@flag.nil?
@@flag = self
@mybrother = Twin.new(name1,name2)
@name = name1
else
@mybrother = @@flag
@@flag = nil
@name = name2
end
end
我是否可以在initialize方法中使用递归?我实现了这个方法,它似乎工作。但我不确定它是否依赖于解释器版本。
我知道我可以写一个类Person和第二个类Twin来创建并成对加入它们。但对我来说这似乎是一个人为的造型。我试图模仿我几年前使用记录在C中写的数据结构。
class Twin
def self.generate_twins(name1,name2)
t1 = Twin.allocate
t2 = Twin.allocate
t1.instance_variable_set(:@name, name1)
t1.instance_variable_set(:@brother, t2)
t2.instance_variable_set(:@name, name2)
t2.instance_variable_set(:@brother, t1)
t1
end
def initialize
raise "Use generate_twins to create twins"
end
def name
@name
end
def brother
@brother
end
end
这段代码表达了我在寻找没有初始化递归的东西。谢谢大家的答案和评论,帮助我找到它。
答案 0 :(得分:0)
您应该创建一个新的类方法来创建这两个双胞胎。我不会像那样使用初始化器。
答案 1 :(得分:0)
我建议为此分开课程。
我不确定twins
是由什么构成的,但你可以创建一个类Single
,它将保存与单个相关的方法,然后是另一个类“Twin”,你将两个Single
传递给。
实施例
Class Single
def initialize(..)
#Initialize the single object here
end
#include any methods relevant to the single object
end
Class Twin
def initialize(single1, single2)
#store the singles in the class
end
#Put methods that use both singles here
end