2012-09-17 157 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

不完全是我在找... –