2012-09-17 167 views
1

我正在处理分形。你从一个矩形开始,并且该形状以给定的衰减率减少。我有它设置做给定的情景的前10次迭代,每个场景是这样的:在Ruby中使用字符串作为变量/对象名称

y_1 = dec_y(y_1) 
y_2 = dec_y(y_2) 
a_y = [y_1, y_2] 
rect_1 = TkcRectangle.new(canvas, [0,0], a_y) 

其中dec_y被定义如下:

def dec_y(y) 
    to_ret = y/$rate 
    return to_ret 
end 

我想打开首先将一段代码放入一个函数/方法中(不完全确定Ruby术语是什么......),这样每次迭代都只是引用一个方法的单行,这会使问题更具可扩展性。但是,我需要每个TkcRectangle具有不同的名称。我想要设置它的方式,每个TkcRectangle将具有相同的名称。但是,如果我可以将对象的名称设置为作为参数传递的字符串,那么我不应该有问题。

如何定义给定字符串的对象的名称?

回答

2

编辑:代码没有经过测试,但会给你的想法。

相反命名每个元素,你可以使用一个数组,并使用该指数,而不是

rectangles_array = Array.new 
for each loop 
    rectangles_array << create_rectangle_object(y_1, y_2, canvas) 
end for each loop 

def dec_y(y) 
    to_ret = y/$rate 
    return to_ret 
end 

def create_rectangle_object(y_1, y_2, canvas) 
    return TkcRectangle.new(canvas, [0,0], [dec_y(y_1), dec_y(y_2)]) 
end 

如果你真的想它命名为了解结构..喜欢的东西

MyRectangleStruct = Struct.new(:obj_name, :x1, :y1, :x2, :y2) 
puts MyRectangleStruct.new(:obj_name => 'First_rec', .....) 
+0

你能解释一下for循环的功能吗? –

+0

当你开始解决下一个问题时,我怀疑你将需要命名你的对象。该指数应该足够。对不起,如果我误解了你的问题。 –

+0

不,我想我明白了......我应该能够得到这个工作,谢谢:) –

0
define_method(method_name, &block) 

method_name是任何字符串,并且&block是红宝石代码块;通常它看起来像这样:

define_method(method_name) do 
    your code goes here 
end 
+0

不完全是我在找... –