1

我正在处理分形。您从一个矩形开始,该形状会按给定的衰减率减小。我将它设置为执行给定场景的前 10 次迭代,每个场景如下所示:

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将具有相同的名称。但是,如果我可以将对象的名称设置为作为参数传递的字符串,那么我应该没有问题。

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

4

2 回答 2

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', .....)
于 2012-09-17T17:48:15.027 回答
0
define_method(method_name, &block)

method_name任何字符串并且&block是一块 ruby​​ 代码;通常它看起来像这样:

define_method(method_name) do
  your code goes here
end
于 2012-09-17T18:04:38.260 回答