我正在处理分形。您从一个矩形开始,该形状按给定的衰减率降低。我已将其设置为执行给定方案的前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
将具有相同的名称。但是,如果我可以将对象的名称设置为作为参数传递的字符串,那么我应该没有问题。
如何定义具有给定字符串的对象的名称?
答案 0 :(得分: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', .....)
答案 1 :(得分:0)
define_method(method_name, &block)
method_name
为任意字符串,&block
为红宝石代码块;通常它看起来像这样:
define_method(method_name) do
your code goes here
end